
Estou trabalhando em um documento semelhante a um banco de dados para armazenar itens e suas informações. Estou tendo problemas para pensar em uma maneira de produzir um relatório para estes usando VBA. Atualmente tenho um formulário de usuário que possui múltiplas páginas com abas para cada linha de informações dos itens:
Guias: [adicionar tudo ao representante] [adicionar por status] [adicionar por tipo] [adicionar por serial] [adicionar por expDate]
cada guia possui botões de alternância diferentes.
No começo eu queria apenas que o código fizesse um relatório usando um select case 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" às abas para que você pudesse adicionar critérios diferentes, por exemplo adicionar todos os itens com status A com expDate A a expDate B. Com isso percebi que tenho 6 abas e teria para codificar todas as instruções IF possíveis... Agora, 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 aos critérios de pesquisa? o resto do código consistiria em contar a quantidade de itens na planilha e iterar através do loop FOR e adicioná-los a um documento Word conforme atendessem aos critérios. Ainda não tenho um código sólido escrito, mas o que tenho é assim:
Neste trecho de código, tentei criar uma função de "reunião" para gerenciar as possíveis instruções IF, dependendo de quais argumentos você passou para ela:
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 do 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
Sinceramente, fiquei sem ideias, não sou um programador proficiente e trabalho com VBA há apenas alguns meses como um projeto adicional ao meu trabalho real. Qualquer ideia ajuda e obrigado a todos pelo seu tempo!