【发布时间】:2017-04-12 17:04:38
【问题描述】:
我正在创建一个 vba excel 类,并试图弄清楚如何允许用户设置应用于变量/字段的值组。从我读到的内容来看,除非您打算要求它们,否则不可能在属性上具有多个参数。我想要做的是使它只有第一个参数是必需的,而剩余的参数数量是可选的。当需要使后续参数可选时,我似乎建议使用 sub 。例如,当我设置以下子时,这很好用
Public Sub SetCategories(CategoryOne As String, Optional CategoryTwo As String)
pCategories(0) = CategoryOne
pCategories(1) = CategoryTwo
End Sub
由于只有两个参数,我只需要一个,上述设置就足够了。但是,我还有其他属性需要最多允许 30 个值,我真的不想硬编码 1 个必需值和 29 个可选值,因为这看起来像是糟糕的设计。那是我开始研究 ParamArray 选项的时候。 ParamArray 非常适合这种情况,除了我遇到了一个问题。 ParamArray 允许任意数量的参数,我需要能够将其限制为 29 个(加上所需的一个)。那么,有没有办法限制 ParamArray 的上限以只允许 Sub 的这么多参数?
类似下面的东西
Public Sub SetKeywords(KeywordOne As String, Optional ParamArray KeywordTwoThroughThirty(29) as String)
End Sub
这可能吗?如果是这样,怎么做?如果没有,你会建议我如何处理这个场景?
【问题讨论】:
-
一个属性不能有多个参数,除非您打算要求它们 - IMO 使用属性参数来创建 索引属性 是语言滥用。将其作为一种方法的良好决策。
-
30 个可选参数是一个糟糕的设计?请告诉写
Application.Run的人! =) -
很高兴再次见到你@Mat'sMug :) 我需要帮助已经有一段时间了。那么,您认为我应该如何处理提供最多 30 个插槽的情况?我希望它像其他参数在可选时显示在函数上一样显示。键入
test.SetKeywords(时的示例我希望它看起来像KeywordOne As String, [KeywordTwoThroughThirty2],[KeywordTwoThroughThirty3]...[KeywordTwoThroughThirty30])。这有可能吗?如果没有,您是否建议提供另一种方法来提供 30 个可选参数? -
如果你想要那种 IntelliSense,那么你需要做
Application.Run所做的事情——没错,30 个显式可选参数。然后让调用者能够使用DoSomething "foo", arg10:="bar"来提供一个可选参数并破坏所有期望第一个可选参数为arg1的内容;-) -
@CaffeinatedCoder - 你的用户是谁?你能期望他们能够传递一个数组,那么你的函数只能使用非空元素吗?
标签: arrays vba excel parameters