将范围保存到变量

Pra*_*mar 6 excel vba

我写了一些功能性的VBA:

Sheets("Src").Range("A2:A9").Copy Destination:=Sheets("Dest").Range("A2")
Run Code Online (Sandbox Code Playgroud)

我想将源范围提取到变量中以获得灵活性.

SrcRange = Sheets("Src").Range("A2:A9")
SrcRange.Copy Destination:=Sheets("Dest").Range("A2")
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.什么SrcRange应该变暗?第一行是否正确?
我尝试了Dimming SrcRange作为Range,它给了我
Runtime error 91: Object Variable or With block variable not set

我对语言不太熟悉,文档让我想要(我找不到Sheets(索引)调用的返回类型,是我发现的最接近的).当我点击Record Macro,执行一些动作,然后点击停止时,Macro正文仍为空白.

谁能解释一下如何使用SrcRange作为变量?

Jea*_*ett 11

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

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

你并没有真正"将"范围"提取"到变量,而是设置对范围的引用.

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

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
Run Code Online (Sandbox Code Playgroud)


Pra*_*mar 8

......答案是:

Set SrcRange = Sheets("Src").Range("A2:A9")
SrcRange.Copy Destination:=Sheets("Dest").Range("A2")
Run Code Online (Sandbox Code Playgroud)

Set一切都有所不同.然后它就像一个魅力.


小智 8

只是为了澄清,正如Jean-FrançoisCorbett所建议的那样,这两种行为之间存在很大差异.

一个操作是复制/加载实际数据从Range("A2:A9")INTO变量数组中调用vArray(更改为避免Variant数组和Sheet之间混淆,称为Src):

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

而另一个只是设置一个范围变量(SrcRange)与范围的ADDRESS Sheets("Src").Range("A2:A9"):

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

在这种情况下,数据不会被复制,并保持原样,但现在可以以与Array相同的方式访问.这通常是完全足够的,但如果您需要重复访问,测试或计算该数据,首先将其加载到数组中将会更快.

例如,假设您要根据已知的Suburbs和Postcodes列表检查"数据库"(大表).两组数据都在单独的表中,但如果您希望它快速运行,请将郊区和邮政编码加载到一个数组(存在于内存中),然后运行主数据库的每一行,对数组数据进行测试.这比从原始工作表中访问两者要快得多.