我可以在 VBA 中同时声明和分配变量吗?

Can I simultaneously declare and assign a variable in VBA?

提问人:Ian R. O'Brien 提问时间:7/15/2010 最后编辑:starballIan R. O'Brien 更新时间:12/29/2022 访问量:209151

问:

我可以将以下声明和赋值转换为一行吗?

Dim clientToTest As String
clientToTest = clientsToTest(i)

Dim clientString As Variant
clientString = Split(clientToTest)
vba 变量声明

评论


答:

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,而不是 .显式指定的数据类型一次只应用于语句中的一个变量。VariantIntegerDim