Vba 重播保留错误

Vba 重播保留错误,vba,excel,excel-2010,Vba,Excel,Excel 2010,我试图保留一个二维数组。在代码的最顶端,我有: Dim BayQuestionArray() As Variant Dim numberofbay As Double 我有两个按钮,第一个按钮用于初始化数组大小: numberofbay = 1 ReDim Preserve BayQuestionArray(numberofbay, 37) 第二个按钮用于放大阵列 ReDim Preserve BayQuestionArray(numberofbay + 1, 37) 第二个按钮不起作用,

我试图保留一个二维数组。在代码的最顶端,我有:

Dim BayQuestionArray() As Variant
Dim numberofbay As Double
我有两个按钮,第一个按钮用于初始化数组大小:

numberofbay = 1
ReDim Preserve BayQuestionArray(numberofbay, 37)
第二个按钮用于放大阵列

ReDim Preserve BayQuestionArray(numberofbay + 1, 37)

第二个按钮不起作用,它一直给我一个错误,说运行时错误9下标超出范围。为什么?

使用“保留”调整数组变量的大小(声明为“保留”,而不是“变量”)时,只能更改最后一个维度的上边界。您需要转置数组,或使用锯齿状数组或其他结构,如字典/集合。

由于安全补丁,最近更改了“redim preserve”命令。此修补程序使用在修补程序之前编写的“redim preserve”影响所有脚本。在补丁之前,您的代码将按编写的方式工作

所有更改数组下限的“redim preserve”命令都不再有效。代码似乎只是忽略了这一行,这会使受影响脚本/代码的诊断变得困难,因为“redim PREVICE”未按预期工作的第一个警告将与溢出错误一起出现,可能与“redim PREVICE”命令相去甚远

有关提示安全修补程序的漏洞的更多信息(并证明我没有编造此漏洞),您可以参考:


如果我将数组从variant更改为string,保留它会起作用吗?不会-事实上,它是一个数组,这意味着你不能做你想做的事情。如果您将其声明为
数组作为变量
可能会起作用-最近的Office更新对变量数组处理做了一些奇怪的事情-但实际上您应该重新考虑您的方法。++您的耐心是值得的:如果您使用
Preserve
关键字,您只能调整最后一个数组维度的大小[…]但是OP的代码试图修改第一个数组维度。它从来没有像写的那样工作过。可能是