2012-03-21 71 views
2

我试图用一些像这样的代码,它的失败:什么数据类型是Excel VBA中的范围?

data = Range("A1") 
MsgBox data.Offset(1,1) 

这似乎是它应打印单元格B2的价值,而是它给了我一个错误(Run-time error 424: Object required.)。

那么表达式Range("A1")返回什么数据类型,以及如何声明data为正确的数据类型来存储它?

回答

8

Range是一个对象。
这意味着你需要使用set分配一个对象引用:

Dim data As Range 
Set data = Range("A1") 

Background information

设置关键字:在VBA,Set关键字是必要的一个对象和分配的分配区分 对象的默认属性 。

+0

难道是公平地说,有两个运营商的位置:' = '这台''取值为'默认属性,和'设置 = '其中''等于''? – Joe 2012-03-21 23:27:10

+0

这很公平,只是'Set'没有将'x'设置为'y',而是创建了对'y'的引用。我还应该提到,为了在代码结束时进行清理,应该使用'Set data = Nothing'来减少引用计数并允许它被垃圾收集。 – bernie 2012-03-21 23:30:04

+1

所以'Set'会导致'x'的值成为'y'的指针? – Joe 2012-03-21 23:33:46

2

为一系列的数据类型,令人惊讶的是,Range :-)

如果曾经得到所需要的对象的消息,那么你几乎肯定需要使用set

set data = Range("a1") 

这是大多数人遇到的经典“疑难杂症”。完整的代码片段是:

Dim data As Range 
Set data = Range("a1")