Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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_Variable Declaration - Fatal编程技术网

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

我可以在VBA中同时声明和分配变量吗?,vba,variable-declaration,Vba,Variable Declaration,我是VBA新手,想知道是否可以将以下声明和赋值转换为一行: Dim clientToTest As String clientToTest = clientsToTest(i) 或 可以对对象进行排序,如下所示 Dim w As New Widget 但是不能使用字符串或变体。VBA中没有速记。不幸的是,如果您希望将其放在一行上以便于阅读,那么使用:连续字符可以获得最接近的结果,这是一种纯粹的视觉效果 Dim clientToTest As String: clientToTest = c

我是VBA新手,想知道是否可以将以下声明和赋值转换为一行:

Dim clientToTest As String
clientToTest = clientsToTest(i)


可以对对象进行排序,如下所示

Dim w As New Widget

但是不能使用字符串或变体。

VBA中没有速记。不幸的是,如果您希望将其放在一行上以便于阅读,那么使用
连续字符可以获得最接近的结果,这是一种纯粹的视觉效果

Dim clientToTest As String:  clientToTest = clientsToTest(i)
Dim clientString As Variant: clientString = Split(clientToTest)

提示(其他答案/评论摘要):也适用于对象(Excel 2010):


事实上,你可以,但不是那样

Sub MySub( Optional Byval Counter as Long=1 , Optional Byval Events as Boolean= True)

'code...

End Sub

在调用sub时,您可以对变量进行不同的设置,或者将它们设置为默认值。

在某些情况下,可以通过使用

比如说,

    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

您可以在一行中定义和分配如下所示的值。我给出了一个在单行中声明和分配两个变量的示例。如果多个变量的数据类型相同

 Dim recordStart, recordEnd As Integer: recordStart = 935: recordEnd = 946

+1、我记得微软在向.NET构建的过程中建议VB6开发人员开始这样做,以便为VB.NET做好准备。这是我对VBA最大的抱怨;我敢打赌,如果管理层愿意添加,初级程序员只需一天就可以将此快捷方式添加到VBA。总的来说,这是不正确的。您可以使用任何数据类型(值或对象)在同一行上声明和初始化变量,只需将“操作”与分号分开即可
。有一些限制,因为不能在同一行上有多个值声明(即
var1=val1:var2=val2
)。它会从根本上排除错误,允许您有时执行这种类型的赋值,但作为一个整体,这种符号并不建议这样做。@GoldBishop,是的,使用冒号将多个语句组合成一行通常是有效的(正如Alex K.所说)。我想说的是
Dim x As New t
语法不适用于字符串或变体(或者可能也不适用于其他原语),它只适用于对象。是的,它不适用于构造函数初始化行,但适用于变体和字符串赋值。对于值类型和某些对象类型,我一直使用它
dim str as String:str=“value”
dim str as Worksheet:set str=ActiveWorkbook。工作表(“Sheet1”)
都重复工作。尽管如此,如果我执行对象实例化
dim ws as New sheet:set ws=ActiveWorkbook。工作表(“Sheet1”)
会像VBA中的任何其他无效操作一样出错。冒号技巧适用于变量和字符串赋值。
New
关键字没有。这就是我要说的。@JohnMGrant可能想澄清你的答案,在我读到它时,它说:你不能对构造函数初始化和字符串/变量值类型进行相同的行赋值。对某些人来说可能有点困惑。这是用于参数,而不是局部变量。
    With Application.FileDialog(msoFileDialogSaveAs)
      If .Show Then
        'use .SelectedItems(1)
      End If
    End With
 Dim recordStart, recordEnd As Integer: recordStart = 935: recordEnd = 946