提问人:Ian R. O'Brien 提问时间:7/15/2010 最后编辑:starballIan R. O'Brien 更新时间:12/29/2022 访问量:209151
我可以在 VBA 中同时声明和分配变量吗?
Can I simultaneously declare and assign a variable in VBA?
问:
我可以将以下声明和赋值转换为一行吗?
Dim clientToTest As String
clientToTest = clientsToTest(i)
或
Dim clientString As Variant
clientString = Split(clientToTest)
答:
26赞
John M Gant
7/15/2010
#1
您可以对对象进行排序,如下所示。
Dim w As New Widget
但不是字符串或变体。
评论
0赞
GoldBishop
10/10/2012
总的来说,这是不正确的。您可以在同一行上声明和初始化具有任何数据类型(值或对象)的变量,只需将“action”与semi-colo分开即可。有一些限制,因为你不能在同一行上有多个值声明(即)。它会偶尔出现错误,并允许您有时执行此类任务,但总体而言,此符号不建议。:
var1 = val1: var2 = val2
2赞
John M Gant
10/11/2012
@GoldBishop,是的,使用冒号将多个语句合并为一行通常有效(正如 Alex K. 所说)。我要说的是不适用于字符串或变体(或者可能也不适用于其他原语)的是语法,它仅适用于对象。Dim x As New T
0赞
GoldBishop
10/11/2012
yes 不适用于构造函数初始化行,但它适用于 Variant 和 String 赋值。我一直将它用于值类型和一些对象类型。 两者都反复工作。虽然,如果我进行对象实例化会像 VBA 中的任何其他无效操作一样出错。dim str as String: str = "value"
dim str as Worksheet: set str = ActiveWorkbook.worksheets("Sheet1")
dim ws as New Worksheet: set ws = ActiveWorkbook.Worksheets("Sheet1")
3赞
John M Gant
10/11/2012
冒号技巧适用于变体和字符串赋值。关键字没有。这就是我要说的。New
2赞
GoldBishop
10/11/2012
@JohnMGrant可能想澄清一下你的答案,正如我所读到的那样,它指出:你不能使用构造函数初始化和字符串/变体值类型进行同行赋值。可能会让某些人感到困惑。
289赞
Alex K.
7/15/2010
#2
不幸的是,VBA 中没有速记,如果您希望它位于一行以提高可读性,那么您将获得的最接近的是使用延续字符的纯视觉事物;:
Dim clientToTest As String: clientToTest = clientsToTest(i)
Dim clientString As Variant: clientString = Split(clientToTest)
提示(其他答案/注释的摘要):也适用于对象 (Excel 2010):
Dim ws As Worksheet: Set ws = ActiveWorkbook.Worksheets("Sheet1")
Dim ws2 As New Worksheet: ws2.Name = "test"
评论
14赞
John M Gant
7/15/2010
+1,我记得Microsoft .NET 的构建过程中建议 VB6 开发人员开始这样做,以便为 VB.NET 做好准备。
3赞
Pete Alvin
9/16/2019
这是我对 VBA 最大的抱怨;我敢打赌,如果管理层愿意添加它,初级程序员只需要一天的时间就可以将这个快捷方式添加到 VBA 中。
3赞
Patrick Lepelletier
3/8/2016
#3
事实上,你可以,但不是那样。
Sub MySub( Optional Byval Counter as Long=1 , Optional Byval Events as Boolean= True)
'code...
End Sub
您可以在调用 sub 时以不同的方式设置变量,或者让它们设置为默认值。
评论
5赞
ivan_pozdeev
7/9/2017
这是针对参数的,而不是局部变量。
1赞
Vadzim
3/20/2019
#4
在某些情况下,通过使用 With
语句可以避免声明变量的全部需求。
例如
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogSaveAs)
If fd.Show Then
'use fd.SelectedItems(1)
End If
这可以改写为
With Application.FileDialog(msoFileDialogSaveAs)
If .Show Then
'use .SelectedItems(1)
End If
End With
3赞
Arpan Saini
7/17/2020
#5
您可以在一行中定义和分配值,如下所示。我举了一个例子,在一行中声明和分配了两个变量。如果多个变量的数据类型相同:
Dim recordStart, recordEnd As Integer: recordStart = 935: recordEnd = 946
评论
0赞
TSmith
10/27/2022
recordStart
在赋值之前有 type here,而不是 .显式指定的数据类型一次只应用于语句中的一个变量。Variant
Integer
Dim
评论