我在一个Excel宏(VBA)中有一个案例,我想标注一个数组,其中维数和每个维的边界是在运行时确定的。我让用户通过为每种选项类型创建一列并填写以下可能性来指定一系列组合选项。列数和选项数是在运行时通过检查工作表确定的。
每个组合都需要运行一些代码(从每一列中选择一个),我想将结果存储在多维数组中。
尺寸的数量可能在2到6之间,因此如果需要的话,我总是可以退回到一堆if else块,但是感觉应该有更好的方法。
我当时想,如果可以在运行时将Redim
语句构造为字符串并执行该字符串,那是有可能的,但这似乎是不可能的。
有什么方法可以动态地改变尺寸的Redim
?
最佳答案
我很确定没有办法在单个ReDim
语句中执行此操作。 Select Case
可能比“一堆If...Else
块”稍微整洁,但是您仍然在写很多单独的ReDim
。
在VBA中处理数组,而您事先不知道它们将具有多少个维只是PITA的一部分-以及ReDim
不够灵活,也没有一种整齐的方法来测试数组以查看有多少维它具有(您必须遍历尝试访问更大的维度并捕获错误,或者在基础内存结构see this question中四处乱窜)。因此,由于语法会有所不同,因此您将需要跟踪维数,并在每次需要访问数组时也写长Case
语句。
我建议您使用所需的最大维度数创建数组,然后将未使用的维度中的元素数设置为1-这样,每次访问数组时,如果您始终使用相同的语法,需要您可以使用UBound()
对此进行检查。这是Excel开发人员自己针对Range.Value
属性采用的方法-即使对于一维Range
也始终返回二维数组。
关于arrays - Redim VBA中的尺寸可变变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31285020/