【发布时间】:2011-03-16 10:17:10
【问题描述】:
我是 VBA 新手,想知道是否可以将以下声明和赋值转换为一行:
Dim clientToTest As String
clientToTest = clientsToTest(i)
或
Dim clientString As Variant
clientString = Split(clientToTest)
【问题讨论】:
我是 VBA 新手,想知道是否可以将以下声明和赋值转换为一行:
Dim clientToTest As String
clientToTest = clientsToTest(i)
或
Dim clientString As Variant
clientString = Split(clientToTest)
【问题讨论】:
您可以在一行中定义和分配一个值,如下所示。我已经给出了在一行中声明和分配的两个变量的示例。如果多个变量的数据类型相同:
Dim recordStart, recordEnd As Integer: recordStart = 935: recordEnd = 946
【讨论】:
不幸的是,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"
【讨论】:
在某些情况下,使用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
【讨论】:
事实上,你可以,但不是那样。
Sub MySub( Optional Byval Counter as Long=1 , Optional Byval Events as Boolean= True)
'code...
End Sub
并且你可以在调用 sub 时对变量进行不同的设置,或者让它们设置为默认值。
【讨论】:
您可以对对象进行排序,如下所示。
Dim w As New Widget
但不是字符串或变体。
【讨论】:
: 分开即可。有一些限制,因为您不能在同一行有多个值声明(即var1 = val1: var2 = val2)。它会偶尔出现错误,并允许您有时执行此类分配,但总体而言,此符号不建议这样做。
Dim x As New T 语法,它只适用于对象。
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 关键字没有。这就是我要说的。