VBA для Excel, создание своего рода динамического оператора if

0

Я работаю над документом, похожим на базу данных, для хранения предметов и их информации. У меня возникли некоторые проблемы, когда я думаю о том, как создать отчет для них, используя VBA. В настоящее время у меня есть пользовательская форма, которая имеет многостраничные вкладки для каждой строки информации для элементов:

Вкладки: [добавить все в реп] [добавить по статусу] [добавить по типу] [добавить по серийному номеру] [добавить по expDate]

каждая вкладка имеет разные кнопки переключения.

Сначала я хотел, чтобы код делал отчет, используя случай выбора с multipage.SelectedItem.index, и я понял, что это будет очень ограничено в том, как будет выглядеть отчет. Я решил создать вкладку «Добавить страницу», чтобы вы могли добавлять различные критерии, например, добавить все элементы со статусом A с expDate A к expDate B. С этим пришло осознание, что у меня есть 6 вкладок, и у меня было бы закодировать все возможные операторы IF ... Теперь для справки: есть ли способ сделать динамический блок IF или CASE, в котором вы могли бы иметь только «активные» или добавленные вкладки в критерии поиска? остальная часть кода будет состоять из подсчета количества элементов на рабочем листе и повторения с помощью цикла FOR и добавления их в документ Word по мере их соответствия критериям. Я не

В этом фрагменте кода я попытался создать функцию «сбора» для управления возможными операторами IF в зависимости от того, какие аргументы вы ему передали:

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

Это неполно, как вы можете видеть.

И у меня также есть это для события нажатия кнопки:

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

Честно говоря, у меня закончились идеи, я не опытный программист, и я работаю с VBA всего несколько месяцев в качестве дополнительного проекта к моей реальной работе. Любая идея помогает и поблагодарить всех за потраченное время!

WestWindsDemon
источник
Может быть, глупый вопрос, но зачем вам это делать в Excel? Доступ предназначен для этого. Если вы хотите создать электронную таблицу, вы не разрабатываете ее в словах с таблицами, не так ли?
LPChip
Я начал делать это в Excel, потому что именно так у нас были все элементы, перечисленные вначале, и я взял это на себя, чтобы улучшить систему. Я как бы эволюционировал оттуда, и сначала это был хороший способ, но последние несколько недель, когда я пытался закодировать эту вещь, было трудным. Такой простой ответ: я не знал, что есть лучший способ.
WestWindsDemon