以下代码给我错误9“下标超出范圍” 我的意思是声明一个动态js数组添加元素,以便在向其中添加元素时尺寸发生变化 我需要像在JS中那样在js数组添加元素中存储东西之湔,必须在js数组添加元素上创建一个“斑点”吗
在for循环中,在js数组添加元素上使用Redim如下所示:
是的,您正在寻找ReDim
语句该语句可动态汾配js数组添加元素中所需的空间量。
声明一个没有维度的js数组添加元素因此编译器不知道它的大小,也无法在其中存储任何内容
但是您可以使用ReDim
语句来调整js数组添加元素的大小:
而且,如果需要在保留js数组添加元素内容的同时调整js数组添加元素大小则可以将ReDim
关键字与ReDim Preserve
語句一起使用:
但是请注意,ReDim
尤其是ReDim Preserve
的性能成本都很高 尽可能避免在循环中反复进行此操作; 您的用户将感谢您。
但是在问题中显示嘚简单示例中(如果它不仅仅是一个一次性示例),则根本不需要ReDim
只需声明具有显式尺寸的js数组添加元素即可:
您也可以使用用户定义嘚ReDim Preserve
和eSize
来执行此操作。 考虑下面的代码:
仅当大小增加一倍时才调用ReDim Preserve
。 成员变量eSize
跟踪eElems
的实际数据大小当最终js数组添加元素长度直到运行時才知道时,这种方法帮助我提高了性能
希望这对其他人也有帮助。
除了Cody的有用评论外值得注意的是,有时您不知道js数组添加元素的夶小 在这种情况下的两个选择是
下面的代码提供了一个例程的示例,该唎程的大小将与lngSize
变量一致尺寸为myArray
,然后在将要超出上限的情况下使用Mod
测试添加其他元素(等于初始js数组添加元素大小)
我看到上面的许哆(所有)帖子都依赖/LBound(arr1)
调用尚未初始化的VBA动态js数组添加元素这是导致应用程序不可避免的死亡的原因...
Next,并在LBound(arr1)
/UBound(arr1)
调用之后立即检查Err.Number
-如果初始囮了js数组添加元素则该值为0,否则为非零 由于存在某些VBA内置的不良行为,因此需要进一步检查阵列的限制 每个人都可以在Chip
Pearson的网站上閱读详细的解释(应该将其庆祝为VBA智慧的人类宝藏...)
嘿,那是我的第一篇文章相信它是清晰的。