excel - 在vba中声明和使用范围

标签 excel vba range

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

因为:

  1. 您明确将 rg 声明为 Range 对象。
  2. 您使用 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/

相关文章:

excel - 做直到循环。满足一个或另一个条件

excel - 运行时错误 1004 Excel 2013

excel - 将 Word 文档中的数据提取到 Excel 电子表格

excel - VBA - 从 XML 代码循环特定的子节点

css - 如何使用 Excel VBA 单击 Web CSS 按钮?

python - 使用范围作为字典中的键

c++ - C++标准在哪里定义了float类型的取值范围?

javascript - 使用正则表达式允许一位数和两位数范围?

c# - 使用c#检查excel中的分组行

string - 向下复制找到的字符串 1 单元格