Cria função por nome de objeto de caixa de seleção (“dinamicamente”)

1

Eu tenho várias caixas de seleção em uma planilha e em outra planilha eu tenho um formulário. Quando uma caixa de seleção é marcada, o conteúdo apropriado será adicionado como uma coluna na folha de formulário.

Eu tenho mais de 500 caixas de seleção e é por isso que quero criar uma maneira fácil de fazer isso. Por exemplo, eu tenho as seguintes caixas de seleção:

  • Project_ID
  • Project_Title
  • Project_Type
  • Project_Status

O nome do objeto dessas caixas de seleção começa com CB_ Portanto, o nome do objeto da caixa de seleção Project_Type é CB_Project_Type .

Agora criei uma função para cada caixa de seleção quando ela é clicada. o nome da função, por exemplo, é Sub CB_Project_Type_Click() Em seguida, a função verificará se essa coluna existe e a adiciona à folha de formulário.

Criar uma função para todas as caixas de seleção será estúpido. Eu quero um método dinâmico para isso. Algo parecido com isto: Se a caixa de seleção "ANY" tiver sido selecionada, use esse nome de objeto da caixa de seleção para adicionar a coluna que possui um nome correspondente à folha de formulário.

O que estou usando agora é:

Sub CB_Projects_Type_Click()
    CB_List "Projects_Type"
End Sub

Sub CB_List(Name As String)
    If ActiveSheet.Shapes("CB_" & Name).ControlFormat.Value = 1 Then
        For i = 0 To 99
            If IsEmpty(Sheets("English").Range("B1").Offset(0, i)) Then
                Sheets("English").Columns(i + 2).Copy
                Sheets("English").Columns(i + 3).Insert
                Sheets("English").Range("B1").Offset(0, i).Value = Name
                i = 99
            End If
        Next i
    Else
        For i = 0 To 99
            If Sheets("English").Range("B1").Offset(0, i).Value = Name Then
                Sheets("English").Columns(i + 2).Delete
                i = 99
            End If
        Next i
    End If
End Sub

Assim, você pode ver que, pelo menos, estou usando uma única função para obter essa coluna na caixa de seleção, mas ainda preciso criar uma subcaixa para cada caixa de seleção. Como posso usar 1 função final que irá obter o nome da função do nome do objeto?

Espero ter sido claro.

    
por SedoSan 04.01.2016 / 10:25

1 resposta

0

Faça um loop pelas caixas de seleção para encontrar as que estão marcadas.

For Each c in ActiveSheet.CheckBoxes
    If c.Value Then CB_List(c.Name)
Next c

Editar: eu reli o seu código e percebi que o seu problema é um pouco mais complicado do que eu pensava inicialmente. Para adicionar os dados que você precisa e excluir os dados que você não precisa, eu acho que você precisa percorrer todas as suas caixas de seleção o tempo todo. Você pode fazer um botão em que o usuário clique e faça algo assim:

Sub Button1_click()
    Dim c as Checkbox
    For Each c in ActiveSheet.CheckBoxes
        CB_List(c.Name)
    Next c
End Sub

Ou talvez você precise fazer:

Sub Button1_click()
    Dim c as OLEObject
    For Each c in ActiveSheet.OLEObjects
        CB_List(c.Name)
    Next c
End Sub

E altere esta linha:

ActiveSheet.Shapes("CB_" & Name).ControlFormat.Value = 1

para isso:

ActiveSheet.Shapes(Name).ControlFormat.Value = 1
    
por 04.01.2016 / 15:58