我正在编写一个类似数据库的文档,用于存储项目及其信息。我在思考如何使用 VBA 为这些项目生成报告时遇到了一些问题。目前我有一个用户表单,其中包含多页,每行项目信息都有选项卡:
标签:[全部添加到代表] [按状态添加] [按类型添加] [按序列添加] [按到期日期添加]
每个标签都有不同的切换按钮。
起初,我只想让代码使用带有 multipage.SelectedItem.index 的选择案例来制作报告,但我意识到这将非常限制报告的形式。我决定在选项卡中添加“添加页面”,以便您可以添加不同的条件,例如添加所有状态为 A 且到期日期为 A 至 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 工作了几个月,作为我实际工作的附加项目。任何想法都有帮助,感谢大家抽出时间!