我有一系列范围(> 500),我在工作簿中使用一般声明定义:Public r1 As Range, Public r2 As Range
等。每个范围始终引用文档中的相同单元格。即r1始终指的是表1,B2。
我的许多事件都单独对所有500个范围采取行动,而且我经常遇到64k模块内存限制,因为我必须声明每个模块中每个变量的范围,我一直在使用它:Set r1 = Sheets("Sheet 1").Range"B2"
有没有办法全局声明范围,然后在使用它们的所有各种模块中自由调用它们?这将为每个模块释放30k内存。
答案 0 :(得分:1)
我很确定如果宏设计确实需要超过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
答案 1 :(得分:0)
可以创建一个设置所有范围的子,然后跟随子只引用变量。
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