Excel 在vba中,dim和set之间有什么区别
请原谅,我是VBA的新手 有时我用Excel 在vba中,dim和set之间有什么区别,excel,vba,vb6,Excel,Vba,Vb6,请原谅,我是VBA的新手 有时我用 Dim r as Range r = Range("A1") Set r = Range("A1") Set r = Range("A1") 其他时候我用 Dim r as Range r = Range("A1") Set r = Range("A1") Set r = Range("A1") 有什么区别?什么时候我应该使用什么?Dim:您正在定义一个变量(这里:r是一个Range类型的变量) Set:您正在设置属性(此处:将r的值设置为范围(“
Dim r as Range
r = Range("A1")
Set r = Range("A1")
Set r = Range("A1")
其他时候我用
Dim r as Range
r = Range("A1")
Set r = Range("A1")
Set r = Range("A1")
有什么区别?什么时候我应该使用什么?Dim:您正在定义一个变量(这里:r是一个Range类型的变量) Set:您正在设置属性(此处:将r的值设置为范围(“A1”)——这不是一个类型,而是一个值) 必须对对象使用set,如果r是简单类型(例如int、string),则只需编写:
Dim r As Integer
r=5
Dim
只声明值和类型
Set
为变量赋值。除非引用对象引用,否则没有理由使用Set
。只有在这种情况下才使用它是一种良好的做法。对于所有其他简单数据类型,只需使用赋值运算符。最好对所有变量进行调暗(维度)但是:
简单数据类型的示例有整数
,长
,布尔
,字符串
。这些只是数据类型,没有自己的方法和属性
Dim i as Integer
i = 5
Dim myWord as String
myWord = "Whatever I want"
对象的一个例子是范围
,工作表
,或工作簿
。它们有自己的方法和属性
Dim myRange as Range
Set myRange = Sheet1.Range("A1")
如果您试图使用最后一行而不设置
,VB将抛出一个错误。现在您已经声明了一个对象
,您可以访问它的属性和方法
myString = myRange.Value
如果变量定义为对象,例如Dim myfldr as Folder,则使用关键字“Set”为其赋值。
Dim
设置
然而,我认为这不是你真正想要的
有时我使用:
Dim r as Range
r = Range("A1")
这是行不通的。如果没有设置
,您将收到运行时错误。这是因为必须使用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
被声明为变量
`Dim r` ' TypeName(r) returns "Empty", which is the value for an uninitialized variant
r
设置为包含单元格“A1”的范围
r
设置为范围(“A1”)
的默认属性的值
在这种情况下,范围的默认属性是.Value
,因此以下两行代码是等效的
r = Range("A1")
r = Range("A1").Value
有关默认对象属性的详细信息,请参阅
至于您的集合
示例:
其他时候我用
Dim r as Range
r = Range("A1")
Set r = Range("A1")
Set r = Range("A1")
如果不首先声明r
是一个范围
或变量
对象,这将不起作用。。。使用Dim
语句-除非未启用选项Explicit
,否则应启用该选项。总是。否则,您将使用未声明的标识符,并且它们都隐式声明为。根据VBA帮助on 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`
实际上所有的变量都是一样的 Dim
是维度的缩写,在VBA和VB6中用于声明局部变量
另一方面,Set与变量声明无关。Set
关键字用于将对象变量分配给新对象
希望这能为您澄清区别。我能知道您参考了哪本教程或书来理解这一点吗?这个答案并不能真正解释VBA非常聪明的原因,它不需要您告诉它您在做什么,就像很多语言一样。然而,这增加了时间。如果你在各种不同的变量上使用了一整套不同维度的数据,那么时间就加起来了。如果您告诉VBA当它看到一个变量时会发生什么,那么它就不必计算出来。另外,如果您告诉VBA变量是整数而不是字符串,那么它就不会占用那么多内存。虽然后一点在常见的小型VBA项目中可能不太有效,但它仍然是一种良好的编码实践。使用Set
而不首先使用Dim
ing变量可以吗?@PierreClaverie是:)它包括Dim和Set@Wolf不确定你是否意识到,但是VBA语言ref现在在github上维护@RubberDuck我不知道(我是vb*新手),谢谢你添加了这张便条。欢迎@Wolf。我知道现在很难找到VBA和旧的VB6文档。