
私は、アイテムとその情報を格納するためのデータベースのようなドキュメントを作成中です。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 を数か月間使用しただけです。どんなアイデアでも役に立ちます。お時間を割いていただいた皆様に感謝します。