Q--*_*ten 6 arrays excel vba excel-vba multidimensional-array
我在Excel宏(VBA)中有一个案例,我想在一个数组中对维度的数量和每个维度的边界在运行时确定.我通过为每个选项类型创建一个列并填写下面的可能性,让用户指定一系列组合选项.通过检查工作表在运行时确定列数和选项数.
有些代码需要遍历每个组合(每列中有一个选项),我想将结果存储在多维数组中.
维度的数量可能在2到6之间,所以如果必须的话,我总是可以回到一堆if else块,但感觉应该有更好的方法.
我认为如果我可以Redim
在运行时将语句构造为字符串并执行字符串,那么可能会这样做,但这似乎不可能.
有没有办法动态地Redim
使用不同数量的维度?
我很确定没有办法在一个ReDim
声明中做到这一点。 Select Case
可能比“一堆If...Else
块”稍微整洁一些,但你仍然写出了很多单独的ReDim
s。
在 VBA 中使用数组,您事先不知道它们将有多少个维度,有点像 PITA - 而且ReDim
不太灵活,也没有一种巧妙的方法来测试数组以查看它有多少个维度有(您必须循环尝试访问更高的维度并捕获错误,或者在底层内存结构中进行修改 -请参阅此问题)。因此,您需要跟踪维数,并Case
在每次需要访问数组时编写长语句,因为语法会有所不同。
我建议创建具有您认为需要的最大维数的数组,然后将任何未使用的维度中的元素数量设置为 1 - 这样,每次访问该数组时,您总是具有相同的语法,并且如果您需要的话你可以使用 来检查这一点UBound()
。这是 Excel 开发人员自己对该属性采取的方法Range.Value
- 即使对于 1 维 ,它也始终返回一个 2 维数组Range
。
归档时间: |
|
查看次数: |
1764 次 |
最近记录: |