将范围保存到variables

我写了一些function性的VBA:

Sheets("Src").Range("A2:A9").Copy Destination:=Sheets("Dest").Range("A2") 

我想提取源范围到一个variables的灵活性。

 SrcRange = Sheets("Src").Range("A2:A9") SrcRange.Copy Destination:=Sheets("Dest").Range("A2") 

但是,这是行不通的。 什么SrcRange应该变暗? 第一行是否正确?
我尝试调暗SrcRange作为范围,它给了我
Runtime error 91: Object Variable or With block variable not set

我不是很熟悉的语言和文档已经离开了我想(我找不到的表格(索引)调用的返回types, 这是我发现最接近)。 当我点击录制macros时,执行一些操作,然后点击停止,macros体仍然是空白的。

任何人都可以阐明如何使用SrcRange作为variables?

在你自己的答案中,你有效地做到这一点:

 Dim SrcRange As Range ' you should always declare things explicitly Set SrcRange = Sheets("Src").Range("A2:A9") SrcRange.Copy Destination:=Sheets("Dest").Range("A2") 

你并不是真的将范围“提取”到一个variables,你正在设置一个范围的引用。

在许多情况下,这可以更高效,也更灵活:

 Dim Src As Variant Src= Sheets("Src").Range("A2:A9").Value 'Read range to array 'Here you can add code to manipulate your Src array '... Sheets("Dest").Range("A2").Value = Src 'Write array back to another range 

澄清一下,正如让 – 弗朗索瓦·科贝特(Jean-FrançoisCorbett)所build议的那样,这两项行动有很大的不同。

一个操作是将Range("A2:A9")的实际数据复制/加载到名为vArray的variables数组(更改以避免混淆variables数组和表单两者,称为Src):

vArray = Sheets("Src").Range("A2:A9").Value

而另一个简单地设置Rangevariables(SrcRange)和范围Sheets("Src").Range("A2:A9")的地址Sheets("Src").Range("A2:A9")

Set SrcRange = Sheets("Src").Range("A2:A9")

在这种情况下,数据不会被复制,而是保持在原来的位置,但现在可以像访问数组一样进行访问。 这通常是非常合适的,但是如果您需要反复访问,testing或计算这些数据,首先将其加载到数组中将会快得多。

例如,假设你想检查一个“数据库”(大单)对已知郊区和邮政编码列表。 两组数据都在不同的工作表中,但是如果您希望运行速度更快,则可以将郊区和邮政编码加载到数组中(居住在内存中),然后遍历主数据库的每一行,对数组数据进行testing。 这将比从原始表格访问两者快得多。

…答案是:

 Set SrcRange = Sheets("Src").Range("A2:A9") SrcRange.Copy Destination:=Sheets("Dest").Range("A2") 

Set使所有的差异。 那么它就像一个魅力。