繁体   English   中英

如何设置可在多个过程/模块中使用的全局变量范围

[英]How to set a global variable range usable in multiple procedures/modules

我在工作簿中使用通用声明定义了一系列范围(> 500): Public r1 As Range, Public r2 As Range等。每个范围始终引用文档中的同一单元格。 即r1始终指的是图纸1,B2。

我的许多事件都会分别在所有500个范围内起作用,并且我经常遇到64k模块内存限制,因为我必须声明我一直在使用的每个模块中每个变量的范围: Set r1 = Sheets("Sheet 1").Range"B2"

有没有一种方法可以全局声明范围,然后在使用它们的所有各个模块中自由调用它们? 这将为每个模块释放30k的内存。

我非常确定如果宏设计确实需要500个以上的Range变量,那么宏设计就会出现严重错误,因此我建议使用https://codereview.stackexchange.com/

推荐的一般方法是将它们添加为“命名范围”,就像它们在第一次添加时在工作簿中保存的那样;如果在行或列之前插入行/列或进行其他类似更改,则会自动调整它们。 您可以像这样将“命名范围”添加到当前活动的工作簿中:

Names.Add "n1", "='Sheet 1'!B2"  ' results in error if already added

Range("n1").Value2 = 42          ' sample use

另一种选择是全局字符串常量:

Public Const r1$ = "'Sheet 1'!B2"

Sub test()
    Range(r1).Value2 = 42
End Sub

可以创建一个设置所有范围的子项,然后后面的子项仅引用变量。

Option Explicit

Public r1 As Range

Sub setup()
Set r1 = Sheet1.Range("a1")
End Sub

Sub test()
r1.Value = 1
End Sub

Sub test2()
r1.Value = 2
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM