我在Excel用户表单中丢失静态变量时遇到了麻烦。
我一直在为excel编写一个例程。我是一个(非常)新手编码器。
我正在尝试将单元格范围填充到数组中。我已经能够毫无问题地完成此操作。
然而,当我试图将数组存储为一个 * static * 变量时,该变量并没有像我希望的那样被保留很长时间。
我认为当在多页中选择另一页时,静态变量被清除,问题就发生了。
代码是这样的:
Sub UserForm_Initialize ()
static myArray () as variant
dim myRange as range
set myRange = [namedrange]
myArray=myRange
msgbox myArray(0,0) 'this works fine
call OtherSub
end sub
sub OtherSub ()
msgbox myArray(0,0) 'this returns a blank
end sub
代码的第一个子代码显示数组元素很好。数组元素在第二个子代码中为空。
我试过:
- 将数组声明为公共变量,但这会返回一个错误(我认为用户表单中的变量默认为私有,不能更改)。
- 使用非常小的变量(简单字符串)
- 在打开用户窗体之前在模块中编写代码(不保留变量)。
我知道我可以只向单元格区域写入数据,但这会违背目的。我希望避免从工作表中读取大型数组的多个示例。
1条答案
按热度按时间slsn1g291#
这可能解释得更清楚一些。将MyArray移到过程之外会将其作用域设置为模块级别,使其可用于该模块中的其他子对象。通常,您希望将变量的作用域保持在所需的最低级别。另一种选择是将变量作为参数传递给其他过程。