我对VBA很陌生,
今天开发一个宏,我发现了一些有趣的东西.
Range像这样使用是有效的:
Dim rg As Range
Set rg = ActiveSheet.Range("A1:B2")
Run Code Online (Sandbox Code Playgroud)
使用Range这样的方法不起作用并导致错误"对象变量未设置":
Dim rg As Range
rg = ActiveSheet.Range("A1:B2")
Run Code Online (Sandbox Code Playgroud)
但使用Range这样的工作:
Dim rg,rg2 As Range
rg = ActiveSheet.Range("A1:B2")
Run Code Online (Sandbox Code Playgroud)
这怎么可能?
Mat*_*don 10
您正在发现Variant和反对引用.
A Range是一个对象 - Variant可以是任何 包括对象的东西.
这是正确的方法:
Dim rg As Range
Set rg = ActiveSheet.Range("A1:B2")
Run Code Online (Sandbox Code Playgroud)
因为:
rg是一个Range对象.Set关键字指定对象引用.如果您没有指定Set关键字,则使用VBA语法为值赋值分配对象引用,这是一个错误:
rg = ActiveSheet.Range("A1:B2")
Run Code Online (Sandbox Code Playgroud)
如果在同一指令中声明多个变量,并且只为最后一个指定了一个类型,那么rg就是Variant这里:
Dim rg,rg2 As Range ' this is like doing Dim rg As Variant, rg2 As Range
rg = ActiveSheet.Range("A1:B2")
Run Code Online (Sandbox Code Playgroud)
VBA很乐意让你分配一个Variant几乎任何东西 ......但事情会在运行时爆炸.
| 归档时间: |
|
| 查看次数: |
6180 次 |
| 最近记录: |