3 回答
TA贡献1809条经验 获得超8个赞
Dim 声明变量。
Dim r As Range
Set 将变量设置为对象引用。
Set r = Range("A1")
但是,我认为这不是您真正要问的。
有时我使用:
Dim r as Range
r = Range("A1")
这将永远行不通。如果没有,Set您将收到运行时错误#91 对象变量或With块变量未设置。这是因为必须使用Set将变量值分配给对象引用。然后,上面的代码将起作用。
我认为以下代码说明了您真正要问的问题。假设我们不声明类型,而是r将其作为Variant类型。
Public Sub test()
Dim r
debug.print TypeName(r)
Set r = Range("A1")
debug.print TypeName(r)
r = Range("A1")
debug.print TypeName(r)
End Sub
因此,让我们分解一下这里发生的情况。
r 声明为Variant
`Dim r` ' TypeName(r) returns "Empty", which is the value for an uninitialized variant
r设置为Range包含单元格“ A1”
Set r = Range("A1") ' TypeName(r) returns "Range"
r被设置为值的的默认属性的Range("A1")。
r = Range("A1") ' TypeName(r) returns "String"
在这种情况下,Range的默认属性为.Value,因此以下两行代码是等效的。
r = Range("A1")
r = Range("A1").Value
有关默认对象属性的更多信息,请参见Chip Pearson的“类的默认成员”。
至于你的Set例子:
其他时候我用
Set r = Range("A1")
如果不先使用语句声明r是a Range或Variantobject ,这将无法工作Dim-除非您未Option Explicit启用,否则应该这样做。总是。否则,您使用的是尚未声明的标识符,它们都隐式声明为 Variants。
- 3 回答
- 0 关注
- 1345 浏览
相关问题推荐
添加回答
举报