请原谅我是VBA的新手.有时候我用
Dim r as Range r = Range("A1")
其他时候我用
Set r = Range("A1")
有什么区别?什么时候用什么?
hvvq6cgz1#
除非引用对象引用,否则没有理由使用set。最好只在该上下文中使用它。对于所有其他简单的数据类型,只需使用赋值运算符。然而,dim(dimension)ALL变量是一个好主意:简单数据类型的例子有integer、long、boolean、string。这些只是数据类型,没有自己的方法和属性。
set
dim
integer
long
boolean
string
Dim i as Integer i = 5 Dim myWord as String myWord = "Whatever I want"
object的一个例子是Range、Worksheet或Workbook。它们有自己的方法和属性。
object
Range
Worksheet
Workbook
Dim myRange as Range Set myRange = Sheet1.Range("A1")
如果你试图使用最后一行而不使用Set,VB将抛出一个错误。现在你已经声明了一个object,你可以访问它的属性和方法。
Set
myString = myRange.Value
a0x5cqrl2#
Dim
Dim r As Range
不过,我觉得这不是你真正想问的。有时我会用途:
这永远不会起作用。如果没有Set,您将收到运行时错误#91 Object variable or With block variable not set。这是因为您 * 必须 * 使用Set将变量值分配给对象引用。然后上面的代码 * 将 * 工作。我认为下面的代码说明了你真正想问的问题。让我们假设我们没有声明类型,而是让r成为Variant类型。
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
让我们来分析一下这里发生了什么。
`Dim r` ' TypeName(r) returns "Empty", which is the value for an uninitialized variant
Set r = Range("A1") ' TypeName(r) returns "Range"
Range("A1")
r = Range("A1") ' TypeName(r) returns "String"
在本例中,Range的默认属性是.Value,因此以下两行代码是等效的。
.Value
r = Range("A1") r = Range("A1").Value
有关默认对象属性的详细信息,请参阅Chip Pearson's "Default Member of a Class"。关于Set的例子:其他时候我用
如果不先声明r是一个Range或Variant对象...使用Dim语句,这将无法工作-除非您没有启用Option Explicit,您应该始终启用。否则,您使用的是尚未声明的标识符,并且它们都隐式声明为Variants。
Option Explicit
vfwfrxfs3#
Dim:您正在定义一个变量(此处:r是Range类型的变量)设置:您正在设置属性(此处:将r的值设置为Range(“A1”)-这不是类型,而是值)。你必须对对象使用set,如果r是一个简单的类型(例如int,string),那么你只需要写:
Dim r As Integer r=5
oug3syen4#
Dim只是声明了值和类型。Set为变量赋值。
ulydmbyx5#
如果一个变量被定义为一个对象,例如Dim myfldr As Folder,它将通过使用关键字“Set”来分配一个值。
ilmyapht6#
Dim是Dimension的缩写,在VBA和VB6中用于声明局部变量。set与变量声明无关。Set关键字用于将对象变量 * 赋值 * 给新对象。希望这能为你澄清两者的区别。
pnwntuvh7#
根据VBA的SET语句帮助,它设置了一个对www.example.com的引用object.so如果你改变一个属性,实际的对象也会改变。
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
其他Vars属性也会更改,因此:
Var1.property1=Var2.property1=Var3.property1=Var4.property1=Object1.Property1=NewpropertyValue`
实际上所有的变量都是一样的!
7条答案
按热度按时间hvvq6cgz1#
除非引用对象引用,否则没有理由使用
set
。最好只在该上下文中使用它。对于所有其他简单的数据类型,只需使用赋值运算符。然而,dim
(dimension)ALL变量是一个好主意:简单数据类型的例子有
integer
、long
、boolean
、string
。这些只是数据类型,没有自己的方法和属性。object
的一个例子是Range
、Worksheet
或Workbook
。它们有自己的方法和属性。如果你试图使用最后一行而不使用
Set
,VB将抛出一个错误。现在你已经声明了一个object
,你可以访问它的属性和方法。a0x5cqrl2#
Dim
declares the variable。Set
sets the variable to an object reference。不过,我觉得这不是你真正想问的。
有时我会用途:
这永远不会起作用。如果没有
Set
,您将收到运行时错误#91 Object variable or With block variable not set。这是因为您 * 必须 * 使用Set
将变量值分配给对象引用。然后上面的代码 * 将 * 工作。我认为下面的代码说明了你真正想问的问题。让我们假设我们没有声明类型,而是让
r
成为Variant
类型。让我们来分析一下这里发生了什么。
r
被声明为变量r
设置为包含单元格“A1”的Range
r
被设置为Range("A1")
的***默认属性***的 * 值 *。在本例中,Range的默认属性是
.Value
,因此以下两行代码是等效的。有关默认对象属性的详细信息,请参阅Chip Pearson's "Default Member of a Class"。
关于
Set
的例子:其他时候我用
如果不先声明
r
是一个Range
或Variant
对象...使用Dim
语句,这将无法工作-除非您没有启用Option Explicit
,您应该始终启用。否则,您使用的是尚未声明的标识符,并且它们都隐式声明为Variants。vfwfrxfs3#
Dim:您正在定义一个变量(此处:r是Range类型的变量)
设置:您正在设置属性(此处:将r的值设置为Range(“A1”)-这不是类型,而是值)。
你必须对对象使用set,如果r是一个简单的类型(例如int,string),那么你只需要写:
oug3syen4#
Dim
只是声明了值和类型。Set
为变量赋值。ulydmbyx5#
如果一个变量被定义为一个对象,例如Dim myfldr As Folder,它将通过使用关键字“Set”来分配一个值。
ilmyapht6#
Dim
是Dimension的缩写,在VBA和VB6中用于声明局部变量。set与变量声明无关。
Set
关键字用于将对象变量 * 赋值 * 给新对象。希望这能为你澄清两者的区别。
pnwntuvh7#
根据VBA的SET语句帮助,它设置了一个对www.example.com的引用object.so如果你改变一个属性,实际的对象也会改变。
其他Vars属性也会更改,因此:
实际上所有的变量都是一样的!