gpt4 book ai didi

vba - Excel VBA基于组合变量编写程序的标准实践

转载 作者:行者123 更新时间:2023-12-02 09:55:30 24 4
gpt4 key购买 nike

我有一系列(复杂的)程序,它们通过一系列用户表单运行,以便创建一个新工作簿,根据用户输入插入所需 VB 的多个模块,通过从一系列表单中复制元素来格式化新工作簿。在包含过程的工作簿中隐藏模板,并在过程结束时提示用户将文档另存为 .xlsm 文件。我已经实现了这一目标。

我为实现此目的而编写的过程的一些变体是以模块化方式编写的,因为用户窗体充当用户的小型可视化工具,可以通过两种方式自定义他们希望生成的工作簿:他们能够指定他们希望在工作簿中包含多少个工作表,并指定他们希望在工作簿中的每个工作表中显示多少个数据表,并根据他们希望创建的每个工作表的工作表和数据表的组合,调用一个过程来容纳它。

该过程生成工作簿并根据用户的需要将 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

根据这些语句中哪一个为 True,将调用一个过程来创建新工作簿,并根据用户需要的工作表和数据表的数量插入代码。您可以从这个示例中看到,如果可能的工作表和数据表的数量增加,这可能不会很好地扩展,上面的示例仅适用于数字 1、2 和 3 的每个可能的数字组合,最多两个工作表。

是否有比我在本示例中使用它的方式更干净、更可扩展的方法来使用 If 调用单独的过程?或者是否有必要使用 If 来处理用户可能需要的每种可能的变量组合?

最佳答案

假设您知道参数的组合,然后标准化您的子名称。然后您可以使用 application.run 并为其提供字符串组合例如

application.Run "tabs" & NumberOfTabsNeeded  & "tabOne" & Tab1Amount & "tabTwo" & Tab2Amount

假设如下:

NumberOfTabsNeeded  : 2
Tab1Amount: 2
Tab2Amount: 3

那么子 tabs2tabOne2tabTwo3 将被调用。

无需大型硬编码 case 语句或 if 语句 block 。

关于vba - Excel VBA基于组合变量编写程序的标准实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41700569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com