
Я работаю над документом, подобным базе данных, для хранения элементов и их информации. У меня возникли некоторые проблемы с тем, как создать отчет для них с помощью VBA. В настоящее время у меня есть пользовательская форма, которая имеет многостраничный вид с вкладками для каждой строки информации для элементов:
Вкладки: [добавить все в репутацию] [добавить по статусу] [добавить по типу] [добавить по серийному номеру] [добавить по дате истечения срока]
каждая вкладка имеет разные кнопки-переключатели.
Сначала я хотел, чтобы код просто создавал отчет, используя выборочный случай с 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 всего несколько месяцев в качестве дополнительного проекта к моей настоящей работе. Любая идея поможет, и спасибо всем за ваше время!