在vba中声明和使用范围

SJG*_*JGD 6 excel vba range

我对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)

因为:

  1. 您明确声明rg是一个Range对象.
  2. 您正确地使用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几乎任何东西 ......但事情会在运行时爆炸.

  • + 1 - 要确认您的推理,这里是cpearson的链接,请滚动至[注意变量声明为一个暗淡的声明](http://www.cpearson.com/excel/declaringvariables.aspx) (3认同)
  • 也许每个人都知道但无论如何...如果```````````````````````````````````````````````````````````````````````````````````````````````````` "A1:B2"到rg(没有错误发生).`````````````````````````````````````````````````````````````` (2认同)