海绵宝宝撒
Dim 声明变量。Dim r As RangeSet 将变量设置为对象引用。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 variantr设置为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。