请原谅我,我是VBA的新手。
有时候我会使用
Dim r as Range
r = Range("A1")
有时候我使用
Set r = Range("A1")
这有什么区别?我应该在什么时候使用它?
请原谅我,我是VBA的新手。
有时候我会使用
Dim r as Range
r = Range("A1")
有时候我使用
Set r = Range("A1")
这有什么区别?我应该在什么时候使用它?
除非涉及到对象引用,否则没有使用set
的必要。在这种情况下只使用它是良好的编程习惯。对于所有其他简单数据类型,只需使用赋值运算符即可。但最好将所有变量都使用dim
进行维度定义:
简单数据类型的示例包括integer
、long
、boolean
和string
。它们只是数据类型,并不具有自己的方法和属性。
Dim i as Integer
i = 5
Dim myWord as String
myWord = "Whatever I want"
一个object
的示例是Range
、Worksheet
或Workbook
。它们有自己的方法和属性。
Dim myRange as Range
Set myRange = Sheet1.Range("A1")
如果您尝试在不使用 Set
的情况下使用最后一行,VB 将会抛出一个错误。现在您已经声明了一个 object
,您可以访问它的属性和方法。
myString = myRange.Value
Set
之前不声明变量,这样做可以吗? - solstice333Dim r As Range
Set
sets the variable to an object reference.
Set r = Range("A1")
这样做是行不通的。没有Sometimes I use:
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
is declared as a Variant
`Dim r` ' TypeName(r) returns "Empty", which is the value for an uninitialized variant
r
is set to the Range
containing cell "A1"
Set r = Range("A1") ' TypeName(r) returns "Range"
r
is set to the value of the default property of Range("A1")
.
r = Range("A1") ' TypeName(r) returns "String"
.Value
,因此以下两行代码是等效的。r = Range("A1")
r = Range("A1").Value
如果想了解更多有关默认对象属性的内容,请查看Chip Pearson的“类的默认成员”。
Set
示例:
这将无法正常工作,除非首先声明Other times I use
Set r = Range("A1")
r
为Range
或Variant
对象...使用Dim
语句-除非您未启用Option Explicit
,但应该始终启用。否则,您正在使用未声明的标识符,它们都被隐式声明为Variants。Dim:你正在定义一个变量(这里是一个类型为 Range 的变量 r)
Set:你正在设置属性(这里将 r 的值设置为 Range("A1") - 这不是一个类型,而是一个值)。
如果 r 是一个简单类型(如 int、string),那么你就不需要使用 set:
Dim r As Integer
r=5
Dim
只是声明值和类型。
Set
将一个值分配给变量。
如果一个变量被定义为一个对象,例如:Dim myfldr As Folder,那么就需要使用关键字“Set”来给它赋值。
Dim
是 Dimension 的缩写,用于在 VBA 和 VB6 中声明本地变量。
相反,Set
与变量声明无关。 Set
关键字用于将对象变量分配给新对象。
希望这为您澄清了区别。
Dim newObj as Object
Set var1=Object1(same type as Object)
Set var2=Object1(same type as Object)
Set var3=Object1(same type as Object)
Set var4=Object1(same type as Object)
Var1.property1=NewPropertyValue
其他变量属性也会改变,所以:
Var1.property1=Var2.property1=Var3.property1=Var4.property1=Object1.Property1=NewpropertyValue`
其实所有的变量都是一样的!