Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中设置变量的原因_Vba_Excel - Fatal编程技术网

在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

我总是对在VBA中设置集合数据类型有疑问

变量的常用方法,例如

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