我可以同时在 VBA 中声明和分配一个变量吗?
Posted
技术标签:
【中文标题】我可以同时在 VBA 中声明和分配一个变量吗?【英文标题】:Can I simultaneously declare and assign a variable in VBA? 【发布时间】:2011-03-16 10:17:10 【问题描述】:我是 VBA 新手,想知道是否可以将以下声明和赋值转换为一行:
Dim clientToTest As String
clientToTest = clientsToTest(i)
或
Dim clientString As Variant
clientString = Split(clientToTest)
【问题讨论】:
【参考方案1】:您可以在一行中定义和分配一个值,如下所示。我已经给出了在一行中声明和分配的两个变量的示例。如果多个变量的数据类型相同:
Dim recordStart, recordEnd As Integer: recordStart = 935: recordEnd = 946
【讨论】:
【参考方案2】:不幸的是,VBA 中没有简写,如果您希望将其放在一行中以提高可读性,那么您将获得的最接近的是使用 :
延续字符的纯视觉事物;
Dim clientToTest As String: clientToTest = clientsToTest(i)
Dim clientString As Variant: clientString = Split(clientToTest)
提示(其他答案/cmets 的摘要):也适用于对象(Excel 2010):
Dim ws As Worksheet: Set ws = ActiveWorkbook.Worksheets("Sheet1")
Dim ws2 As New Worksheet: ws2.Name = "test"
【讨论】:
+1,我记得微软在构建 .NET 期间曾建议 VB6 开发人员开始这样做,以便为 VB.NET 做好准备。 这是我对 VBA 最大的抱怨;我敢打赌,如果管理层愿意添加此快捷方式,初级程序员只需一天时间即可将其添加到 VBA。【参考方案3】:在某些情况下,使用With
statement 可以避免声明变量的全部需要。
例如,
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
【讨论】:
【参考方案4】:事实上,你可以,但不是那样。
Sub MySub( Optional Byval Counter as Long=1 , Optional Byval Events as Boolean= True)
'code...
End Sub
并且你可以在调用 sub 时对变量进行不同的设置,或者让它们设置为默认值。
【讨论】:
这是用于参数,而不是局部变量。【参考方案5】:您可以对对象进行排序,如下所示。
Dim w As New Widget
但不是字符串或变体。
【讨论】:
这是不正确的,作为一个整体。您可以使用任何数据类型(值或对象)在同一行上声明和初始化变量,只需将“动作”与分号:
分开即可。有一些限制,因为您不能在同一行有多个值声明(即var1 = val1: var2 = val2
)。它会偶尔出现错误,并允许您有时执行此类分配,但总体而言,此符号不建议这样做。
@GoldBishop,是的,使用冒号将多个语句组合成一行通常有效(正如 Alex K. 所说)。我所说的不适用于字符串或变体(或者可能也不适用于其他原语)是 Dim x As New T
语法,它只适用于对象。
是的,不能在构造函数初始化行上工作,但它可以用于 Variant 和 String 分配。我一直将它用于值类型和一些对象类型。 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")
会像 VBA 中的任何其他无效操作一样出错。
冒号技巧适用于变体和字符串赋值。 New
关键字没有。这就是我要说的。
@JohnMGrant 可能想澄清你的答案,正如我读到的那样:你不能对构造函数初始化和字符串/变量值类型进行同一行赋值。可能会让一些人感到困惑。以上是关于我可以同时在 VBA 中声明和分配一个变量吗?的主要内容,如果未能解决你的问题,请参考以下文章
c语言是在声明变量的同时,分配内存的吗?程序结束运行了,内存会释放吗?