在VBA中设置变量的原因
我总是对在VBA中设置集合数据类型有疑问 变量的常用方法,例如在VBA中设置变量的原因,vba,excel,Vba,Excel,我总是对在VBA中设置集合数据类型有疑问 变量的常用方法,例如 Dim userType1 as String 但对于集合,我们需要声明如下: Dim userCollection As Collection Set userCollection = New Collection 为什么你不能: Dim userCollection As Collection 为什么集合在VBA中的工作方式不同 我从来都不明白这一点。我需要一些解释 编辑: 这两者有什么区别 userCollection
Dim userType1 as String
但对于集合,我们需要声明如下:
Dim userCollection As Collection
Set userCollection = New Collection
为什么你不能:
Dim userCollection As Collection
为什么集合在VBA中的工作方式不同
我从来都不明白这一点。我需要一些解释
编辑:
这两者有什么区别
userCollection = New Collection
Set userCollection = New Collection
因为它是一个
对象
Dim
(或Dim将为声明的任何数据类型分配一定量的内存(或变体
,如果未声明类型),并允许相应的IntelliSense菜单可用。这几乎就是Dim的全部
因此,对于对象,您可以使用以下方法为其分配内存:
Dim x As Collection
但是这实际上并没有创建所需的对象,这就是Set
和New
的作用
Set x = New Collection
实际上,您可以这样声明:
Dim x As New Collection
这将允许变量†
例如:
Sub Foo()
Dim x As Collection
x.Add "Test" '// <~~ Error, because the actual Collection object doesn't exist yet.
Set x = New Collection '// <~~ Create a 'New' collection object and 'Set' it's
'// reference to the memory allocated for 'x'
x.Add "Test 1" '// <~~ Works fine.
Dim y As New Collection
y.Add "Test 2" '// <~~ Works fine, because the Collection
'// object will now instantiate itself
End Sub
Sub-Foo()
Dim x作为集合
x、 添加“Test”//,因为它是对象
Dim
(或Dim将为声明的任何数据类型分配一定量的内存(或变体
,如果未声明类型),并允许相应的IntelliSense菜单可用。这几乎就是Dim的全部
因此,对于对象,您可以使用以下方法为其分配内存:
Dim x As Collection
但是这实际上并没有创建所需的对象,这就是Set
和New
的作用
Set x = New Collection
实际上,您可以这样声明:
Dim x As New Collection
这将允许变量†
例如:
Sub Foo()
Dim x As Collection
x.Add "Test" '// <~~ Error, because the actual Collection object doesn't exist yet.
Set x = New Collection '// <~~ Create a 'New' collection object and 'Set' it's
'// reference to the memory allocated for 'x'
x.Add "Test 1" '// <~~ Works fine.
Dim y As New Collection
y.Add "Test 2" '// <~~ Works fine, because the Collection
'// object will now instantiate itself
End Sub
Sub-Foo()
Dim x作为集合
x、 添加“Test”//,因为它是对象
Dim
(或Dim将为声明的任何数据类型分配一定量的内存(或变体
,如果未声明类型),并允许相应的IntelliSense菜单可用。这几乎就是Dim的全部
因此,对于对象,您可以使用以下方法为其分配内存:
Dim x As Collection
但是这实际上并没有创建所需的对象,这就是Set
和New
的作用
Set x = New Collection
实际上,您可以这样声明:
Dim x As New Collection
这将允许变量†
例如:
Sub Foo()
Dim x As Collection
x.Add "Test" '// <~~ Error, because the actual Collection object doesn't exist yet.
Set x = New Collection '// <~~ Create a 'New' collection object and 'Set' it's
'// reference to the memory allocated for 'x'
x.Add "Test 1" '// <~~ Works fine.
Dim y As New Collection
y.Add "Test 2" '// <~~ Works fine, because the Collection
'// object will now instantiate itself
End Sub
Sub-Foo()
Dim x作为集合
x、 添加“Test”//,因为它是对象
Dim
(或Dim将为声明的任何数据类型分配一定量的内存(或变体
,如果未声明类型),并允许相应的IntelliSense菜单可用。这几乎就是Dim的全部
因此,对于对象,您可以使用以下方法为其分配内存:
Dim x As Collection
但是这实际上并没有创建所需的对象,这就是Set
和New
的作用
Set x = New Collection
实际上,您可以这样声明:
Dim x As New Collection
这将允许变量†
例如:
Sub Foo()
Dim x As Collection
x.Add "Test" '// <~~ Error, because the actual Collection object doesn't exist yet.
Set x = New Collection '// <~~ Create a 'New' collection object and 'Set' it's
'// reference to the memory allocated for 'x'
x.Add "Test 1" '// <~~ Works fine.
Dim y As New Collection
y.Add "Test 2" '// <~~ Works fine, because the Collection
'// object will now instantiate itself
End Sub
Sub-Foo()
Dim x作为集合
x、 添加“Test”//在VB中,集合
是一种对象类型,而字符串
(或整数
,以及其他一些)是值类型。对象是堆分配的,必须在使用前进行初始化,因此使用Set xyz=New abc
,其中的值类型通常在堆栈上分配,并且可以在不进行初始化的情况下使用。@MartinParkin这是一个答案,而不是注释。。。请写下这一点作为回答…对于集合
,请参阅和。可能的重复不是重复,因为用户不知道对象和变量的区别。在VB中,集合
是一种对象类型,而字符串
(或整数
,以及其他一些)是值类型。对象是堆分配的,必须在使用前进行初始化,因此使用Set xyz=New abc
,其中的值类型通常在堆栈上分配,并且可以在不进行初始化的情况下使用。@MartinParkin这是一个答案,而不是注释。。。请写下这一点作为回答…对于集合
,请参阅和。可能的重复不是重复,因为用户不知道对象和变量的区别。在VB中,集合
是一种对象类型,而字符串
(或整数
,以及其他一些)是值类型。对象是堆分配的,必须在使用前进行初始化,因此使用Set xyz=New abc
,其中的值类型通常在堆栈上分配,并且可以在不进行初始化的情况下使用。@MartinParkin这是一个答案,而不是注释。。。请写下这一点作为回答…对于集合
,请参阅和。可能的重复不是重复,因为用户不知道对象和变量的区别。在VB中,集合
是一种对象类型,而字符串
(或整数
,以及其他一些)是值类型。对象是堆分配的,必须在使用前进行初始化,因此使用Set xyz=New abc
,其中的值类型通常在堆栈上分配,并且可以在不进行初始化的情况下使用。@MartinParkin这是一个答案,而不是注释。。。请将此作为回答…有关设置
,请参阅和。由于用户不知道对象和变量的区别,因此可能的重复不是重复的。在VBA中声明新的
不是声明+初始化。执行Dim后,变量仍然为Nothing
。但现在它会,但什么都不是。好的地方-我盯着本地窗口看了一会儿:)我会更新我的答案。在VBA中将声明为New
不是declare+initialize。执行Dim后,变量仍然为Nothing
。但现在它将是b