VBA para excel, criando algum tipo de instrução if dinâmica

0

Estou trabalhando em um documento semelhante a um banco de dados para armazenar itens e suas informações. Eu estou tendo algum problema pensando em uma maneira de produzir um relatório para estes usando o VBA. Atualmente, tenho um formulário de usuário que possui várias páginas com guias para cada linha de informações dos itens:

Guias: [adicionar todos ao representante] [adicionar por status] [adicionar por tipo] [adicionar por série] [adicionar por expDate]

cada aba tem diferentes botões de alternância.

No começo, eu queria apenas que o código fizesse um relatório usando um caso selecionado com multipage.SelectedItem.index, e percebi que isso seria muito limitado em como o relatório seria. Decidi ter uma "página de adição" para as abas para que você pudesse adicionar critérios diferentes, por exemplo, adicionar todos os itens com status A com expDate A para exp.Date B. Com isso veio a percepção de que eu tenho 6 abas e eu teria codificar todas as possíveis instruções IF ... Agora, para o pedido de ajuda: existe uma maneira de criar um bloco IF ou CASE dinâmico no qual você poderia ter apenas as guias "ativas" ou adicionadas nos critérios de busca? o restante do código consistiria em fazer a contagem da quantidade de itens na planilha e iterar através do uso de um loop FOR e adicioná-los a um documento do Word conforme eles atendem aos critérios. Eu não tenho um código sólido escrito ainda, mas o que eu tenho é assim:

Neste cplo de código, tentei criar uma função "coletar" para gerenciar as possíveis instruções IF, dependendo de quais argumentos você passou para ele:

Private Function advancedGathering(Optional status As String, Optional itemType As String, Optional id As Integer, Optional expDate As Date, Optional holder As String)

Select Case advancedGathering
    Case status <> Null And _
         itemType <> Null And _
         id <> Null And _
         expDate <> Null And _
         holder <> Null

    Case status <> Null And _
         itemType <> Null And _
         id  <> Null And _
         expDate <> Null And _
         holder <> Null

    End Select


End Function

Está incompleto como você pode ver.

E também tenho isso para o evento de clique de botão:

Private Sub Button_generate_Click()

    Dim row, quantity As Integer

    quantity = WorksheetFunction.Count(Range(colHandler.column("id") & 3, colHandler.column("id") & 900)) 'There are less than 900 items, this is just to capture all

    If Toggle_status_ATR.Value = False Or _
       Toggle_type_ATR.Value = False Or _
       Toggle_id_ATR.Value = False Or _
       Toggle_expDate_ATR.Value = False Or _
       Toggle_holder_ATR.Value = False Then

        Select Case MultiPage_main.SelectedItem.Index
            Case 0 'Add All"
                If Toggle_all_addAll.Value = True Then
                    'This is the first tab which I'm not worried about because if selected it will add all the info on the items
                Else

                End If

            Case 1 'Add by Status
                    If Toggle_status_wayOverdue.Value = True Then
                ElseIf Toggle_status_overdue.Value = True Then
                ElseIf Toggle_status_due.Value = True Then
                ElseIf Toggle_status_good.Value = True Then
                ElseIf Toggle_status_valid.Value = True Then
                End If

            Case 2 'Add by Type

            Case 3 'Add by ID

            Case 4 'Add by expDate

            Case 5 'Add by Holder

        End Select

    Else '> Any of the [Toggle_xxx_ATR] buttons are clicked

    End If

Multipage_selection: 'I tried to use GOTO statements


check_valid:

    Unload Me

End Sub

Eu honestamente fiquei sem ideias, não sou um codificador proficiente e venho trabalhando com o VBA por apenas alguns meses como um projeto adicional ao meu trabalho real. Qualquer ideia ajuda e agradece a todos pelo seu tempo!

    
por WestWindsDemon 04.04.2018 / 16:36

0 respostas