我对VBA还是很陌生,
今天开发宏时,我注意到了一些有趣的事情。
使用Range
像这样的工作:
Dim rg As Range
Set rg = ActiveSheet.Range("A1:B2")
这样使用Range
不起作用,并导致错误“未设置对象变量”:
Dim rg As Range
rg = ActiveSheet.Range("A1:B2")
但是这样使用Range
是可行的:
Dim rg,rg2 As Range
rg = ActiveSheet.Range("A1:B2")
这怎么可能?
您正在发现Variant
对象引用。
ARange
是一个对象-aVariant
可以是任何东西, 包括一个对象。
这是正确的解决方法:
Dim rg As Range
Set rg = ActiveSheet.Range("A1:B2")
因为:
rg
是一个Range
对象。Set
关键字正确分配对象引用。如果不指定Set
关键字,则使用VBA语法为值分配分配对象引用,这是一个错误:
rg = ActiveSheet.Range("A1:B2")
如果在同一条指令中声明多个变量,并且仅为最后一个变量指定类型,则此处rg
为a Variant
:
Dim rg,rg2 As Range ' this is like doing Dim rg As Variant, rg2 As Range
rg = ActiveSheet.Range("A1:B2")
VBA会很乐意让您为a分配Variant
几乎所有内容……但是事情会在运行时崩溃。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句