我对 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
和对象引用。
Range
是一个对象 - Variant
可以是任何东西 包括一个对象。
这是正确的方法:
Dim rg As Range
Set rg = ActiveSheet.Range("A1:B2")
因为:
- 您明确将
rg
声明为Range
对象。 - 您使用
Set
关键字正确分配了对象引用。
如果您不指定 Set
关键字,则会使用 VBA 语法为值赋值来分配对象引用,这是一个错误:
rg = ActiveSheet.Range("A1:B2")
如果您在同一条指令中声明多个变量,并且只为最后一个指定类型,则此处的 rg
是一个 Variant
:
Dim rg,rg2 As Range ' this is like doing Dim rg As Variant, rg2 As Range
rg = ActiveSheet.Range("A1:B2")
VBA 会很乐意让您分配一个 Variant
几乎任何东西...但事情会在运行时爆炸。
关于excel - 在vba中声明和使用范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27403834/