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

我有一大系列的范围(> 500),我已经在我的工作簿中使用一般性声明来定义: Public r1 As Range, Public r2 As Range等每个范围始终引用文档中的同一个单元格。 即r1始终指纸张1,B2。

我的许多事件都是单独对所有500个范围采取行动,而且我经常遇到64k模块内存限制,因为我必须在每个模块中声明每个variables的范围: Set r1 = Sheets("Sheet 1").Range"B2"

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

我非常确定,如果macrosdevise真的需要超过500个Rangevariables,那么我会推荐https://codereview.stackexchange.com/

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

 Names.Add "n1", "='Sheet 1'!B2" ' results in error if already added Range("n1").Value2 = 42 ' sample use 

另一种替代scheme可能是全局string常量:

 Public Const r1$ = "'Sheet 1'!B2" Sub test() Range(r1).Value2 = 42 End Sub 

可以创build一个设置所有范围的sub,然后跟随subs只是引用该variables。

 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