Excel 的 VBA,创建某种动态 if 语句

Excel 的 VBA,创建某种动态 if 语句

我正在编写一个类似数据库的文档,用于存储项目及其信息。我在思考如何使用 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 工作了几个月,作为我实际工作的附加项目。任何想法都有帮助,感谢大家抽出时间!

相关内容