web-dev-qa-db-ja.com

VBAで変数を同時に宣言して割り当てることはできますか?

私はVBAが初めてなので、次の宣言と割り当てを1行に変換できるかどうか知りたいです。

Dim clientToTest As String
clientToTest = clientsToTest(i)

または

Dim clientString As Variant
clientString = Split(clientToTest)
152
Ian R. O'Brien

残念ながら、VBAには省略形はありません。最も近いのは、読みやすくするために:継続文字を1行で使用する場合は、純粋に視覚的なものです。

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"
218
Alex K.

次のように、オブジェクトを使用して並べ替えることができます。

Dim w As New Widget

しかし、文字列やバリアントではありません。

19
John M Gant

実際、できますが、そうではありません。

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

'code...

End Sub

また、サブルーチンを呼び出すときに変数を異なる方法で設定したり、デフォルト値のままにしたりできます。

1

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
0
Vadzim