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

时间:2017-02-21 00:57:40

标签: excel vba excel-vba

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

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

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

2 个答案:

答案 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