我有一系列(複雜)程序,它們通過一系列用戶表單運行,以創建一個新的工作簿,根據用戶輸入插入所需VB的幾個模塊,格式新工作簿通過從包含過程的工作簿中的一系列隱藏模板中複製元素,並提示用戶在過程結束時將文檔另存爲.xlsm文件。我已經實現了這一點。Excel VBA基於組合變量編寫程序的標準做法
爲了達到這個目的,我編寫的程序的一些變體是以模塊化的方式編寫的,因爲用戶表單作爲一種小型的可視化工具供用戶定製他們希望以兩種方式生成的工作簿:它們能夠指定他們希望在工作簿中有多少工作表,並指定他們希望爲工作簿中的每個工作表顯示多少個數據表,並基於他們希望創建的每個工作表的工作表和數據表的組合,調用一個過程以適應它。
該過程根據用戶的需求生成工作簿並插入VB代碼,然後調用一系列單獨的模塊化過程,爲每個需要的工作表構建每個單獨的數據表。如果需要,我可以提供這些代碼示例。
我的問題屬於我從用戶窗口調用這些過程的方式。目前我使用一系列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
根據這些陳述中的哪些陳述爲真,調用創建新工作簿的過程,根據用戶需要的工作表和數據表的數量插入代碼。從這個例子可以看出,如果可能的工作表和數據表的數量增加,這可能不會很好地擴展,上面的例子僅適用於數字1,2和3的每個可能的數字組合,最多兩個工作表。
是否有更清晰,更可擴展的方法來調用獨立的程序?如何在本例中使用它?還是有必要使用If來處理用戶可能需要的每個可能的變量組合?
美麗。我唯一不同的地方是在它自己的指令中連接過程名稱,以便在需要時更容易輸出/調試......並用錯誤處理程序包裝它,以防連接過程名稱不存在。 –