Excel の VBA、ある種の動的な if ステートメントを作成する

Excel の VBA、ある種の動的な if ステートメントを作成する

私は、アイテムとその情報を格納するためのデータベースのようなドキュメントを作成中です。VBA を使用してこれらのレポートを作成する方法を考えているときに、問題が生じています。現在、アイテムの情報の各行にタブが付いた複数ページを持つユーザー フォームがあります。

タブ: [すべてを担当者に追加] [ステータスで追加] [タイプで追加] [シリアルで追加] [ExpDateで追加]

各タブには異なる切り替えボタンがあります。

最初は、コードで multipage.SelectedItem.index の select case を使用してレポートを作成するだけにしたいと思っていましたが、それではレポートの内容が非常に限られてしまうことに気付きました。タブに「ページを追加」して、さまざまな条件を追加できるようにしました。たとえば、expDate A から expDate B までのステータス A のすべてのアイテムを追加します。これで、タブが 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 を数か月間使用しただけです。どんなアイデアでも役に立ちます。お時間を割いていただいた皆様に感謝します。

関連情報