2017-02-21 89 views
0

我有一个大系列的范围(> 500),我在我的工作簿使用一般声明定义的可用:Public r1 As Range, Public r2 As Range等各范围始终是指在同一小区该文件。即r1始终指纸张1,B2。如何设置一个全局变量范围在多个程序/模块

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

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

+2

将命名范围内工作? –

+1

按优先顺序排列:1)命名区域,2)班,3)的子程序,设置它们,从每个例程调用需要它们 –

+0

我尝试使用命名范围,但是当我打电话的范围内,我得到一个错误,说编译错误,参数非可选。我不确定一个班会如何运作。对于从例程中调用每个例程,我认为这与以下建议的思路是一样的,即我一直努力使数周的工作没有成功。 – Mythranor

回答

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 
+0

我见过这个建议好几次,但似乎永远不能得到它的工作。我使用下面的代码构建了一个测试文件,它将使用两个按钮在两个选项之间更改单元格中的值,这是宏所做的极其简化的版本。我使用的代码是: 子设置() R1 = Sheet1.Range( “A1”) 结束子 私人小组CommandButton1_Click() r1.Value = 1 结束子 私人小组CommandButton2_Click() R1 .Value = 2 End Sub 但是,当我点击按钮,我得到运行时错误424. – Mythranor

+0

如果你只是复制并粘贴我发布到新模块的代码是否适合你? 还设置需要一个'set'设置'r1' – ballsy26

+0

的它没有范围。我收到运行时错误“91”:对象变量或带块变量未设置 – Mythranor

1

我敢肯定有一些可怕的错误与宏的设计是否真的需要500级多范围的变量,所以我会建议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

与单元格地址相同的范围名称是不允许的 – jkpieterse

+0

谢谢@jkpieterse我不确定是否允许没有c – Slai