私は新しいワークブックを作成し、ユーザ入力、フォーマットに基づいて必要なVBのいくつかのモジュールを挿入するために一連のユーザフォームを介して実行する一連の(複雑な)プロシージャを含むブック内の一連の隠しテンプレートから要素をコピーし、プロシージャの最後に文書を.xlsmファイルとして保存するようにユーザーに求めます。私はこれを達成しました。組み合わせ変数に基づいたプロシージャを書くためのExcel VBA標準プラクティス
私がこれを達成するために書いた手順のいくつかは、モジュラー形式で書かれています。ユーザーフォームは、ユーザーが作成したいブックを2つの方法でカスタマイズする小さなビジュアルツールとして機能するためです。ワークブックに含めるワークシートの数を指定し、ワークブックごとに表示するデータ・テーブルの数を指定し、作成するワークシートごとのワークシートとデータ・テーブルの組み合わせに基づいて、プロシージャをコールしますそれに対応する。
この手順では、ワークブックを生成し、ユーザーのニーズに基づいてVBコードを挿入し、必要なワークシートごとに個別のデータテーブルを作成する一連のモジュール式プロシージャを呼び出します。要求された場合、これらのコード例を提供することができます。
私の質問は、私がこれらのプロシージャをuserformから呼び出す方法に関するものです。現在、私は、if文の一連の使用(魅力がないが、それは、この場合に必要である場合、各ステートメントは、一意の番号の組み合わせに基づいて、それぞれが別々のプロシージャを呼び出しているように私は、わからないよ):
'Declare the number of worksheets the user needs
Dim NumberOfTabsNeeded As String
NumberOfTabsNeeded = UserForm1.ComboBox2.Value
'Number of data tables needed per worksheet
Dim Tab1Amount As String
Tab1Amount = UserForm1.Label71.Caption
Dim Tab2Amount As String
Tab2Amount = UserForm1.Label72.Caption
'One worksheet needed
If NumberOfTabsNeeded = "1" And Tab1Amount = "1" Then Call OneTabOneDTableAddCode
If NumberOfTabsNeeded = "1" And Tab1Amount = "2" Then Call OneTabTwoDTablesAddCode
If NumberOfTabsNeeded = "1" And Tab1Amount = "3" Then Call OneTabThreeDTablesAddCode
'Two worksheets needed
If NumberOfTabsNeeded = "2" And Tab1Amount = "1" And Tab2Amount = "1" Then Call TwoTabsOneDTableEachAddCode
If NumberOfTabsNeeded = "2" And Tab1Amount = "1" And Tab2Amount = "2" Then Call TwoTabsOneDTableTwoDTablesAddCode
If NumberOfTabsNeeded = "2" And Tab1Amount = "1" And Tab2Amount = "3" Then Call TwoTabsOneDTableThreeDTablesAddCode
If NumberOfTabsNeeded = "2" And Tab1Amount = "2" And Tab2Amount = "1" Then Call TwoTabsTwoDTablesOneDTableAddCode
If NumberOfTabsNeeded = "2" And Tab1Amount = "2" And Tab2Amount = "2" Then Call TwoTabsTwoDTablesTwoDTablesAddCode
If NumberOfTabsNeeded = "2" And Tab1Amount = "2" And Tab2Amount = "3" Then Call TwoTabsTwoDTablesThreeDTablesAddCode
If NumberOfTabsNeeded = "2" And Tab1Amount = "3" And Tab2Amount = "1" Then Call TwoTabsThreeDTablesOneDTableAddCode
If NumberOfTabsNeeded = "2" And Tab1Amount = "3" And Tab2Amount = "2" Then Call TwoTabsThreeDTablesTwoDTablesAddCode
If NumberOfTabsNeeded = "2" And Tab1Amount = "3" And Tab2Amount = "3" Then Call TwoTabsThreeDTablesThreeDTablesAddCode
これらのステートメントのいずれがTrueかに基づいて、新しいワークブックを作成し、ユーザーが必要とするワークシートおよびデータテーブルの数に基づいてコードを挿入するプロシージャが呼び出されます。可能なワークシートとデータテーブルの数を増やす場合、これはおそらく非常にうまくスケールされないことがこの例から分かります。上記の例は、最大1,2ワークシート。
この例で私が使っている方法よりも、Ifを使って別の手順を呼び出す方法がより洗練されていますか?または、Ifを使用して、ユーザーが必要とする可能性のある変数の組み合わせを処理する必要がありますか?
美しい。私は別のやり方は、独自の命令でプロシージャ名を連結し、必要に応じて出力/デバッグを容易にすることです。連結ハンドラが存在しない場合。 –