Bisakah saya secara bersamaan mendeklarasikan dan menetapkan variabel dalam VBA?


163

Saya baru mengenal VBA dan ingin tahu apakah saya dapat mengubah deklarasi dan penugasan berikut menjadi satu baris:

Dim clientToTest As String
clientToTest = clientsToTest(i)

atau

Dim clientString As Variant
clientString = Split(clientToTest)

Jawaban:


237

Sayangnya tidak ada singkatan dalam VBA, Yang paling dekat Anda akan dapatkan adalah hal yang murni visual menggunakan :karakter lanjutan jika Anda ingin itu pada satu baris untuk dibaca;

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

Petunjuk (ringkasan jawaban / komentar lain): Bekerja dengan objek juga (Excel 2010):

Dim ws  As Worksheet: Set ws = ActiveWorkbook.Worksheets("Sheet1")
Dim ws2 As New Worksheet: ws2.Name = "test"

13
+1, saya ingat Microsoft menyarankan saat membangun ke .NET agar pengembang VB6 mulai melakukan ini untuk mempersiapkan diri untuk VB.NET.
John M Gant

Ini adalah satu-satunya keluhan terbesar saya tentang VBA; Saya yakin itu akan membutuhkan programmer junior hanya sehari untuk menambahkan cara pintas ini ke VBA jika manajemen peduli untuk menambahkannya.
Pete Alvin

21

Anda dapat menyortir melakukan itu dengan objek, seperti pada berikut ini.

Dim w As New Widget

Tetapi tidak dengan string atau varian.


Ini tidak benar, secara keseluruhan. Anda dapat mendeklarasikan dan menginisialisasi variabel pada baris yang sama dengan tipe data apa pun (nilai atau objek), dengan hanya memisahkan "tindakan" dengan semi-colo :. Ada beberapa batasan karena Anda tidak dapat memiliki deklarasi nilai berganda pada baris yang sama (yaitu var1 = val1: var2 = val2). Ini akan keluar secara speradis dan memungkinkan Anda untuk melakukan tugas semacam ini kadang-kadang tetapi secara keseluruhan tidak disarankan oleh notasi ini.
GoldBishop

2
@GoldBishop, ya, menggunakan titik dua untuk menggabungkan beberapa pernyataan menjadi satu baris umumnya berfungsi (seperti kata Alex K.). Apa yang saya katakan tidak akan bekerja dengan string atau varian (atau mungkin dengan primitif lainnya juga) adalah Dim x As New Tsintaks, yang hanya berfungsi dengan objek.
John M Gant

ya tidak akan bekerja pada jalur Inisialisasi konstruktor tetapi akan bekerja dengan penugasan Varian dan String. Saya menggunakannya sepanjang waktu untuk Jenis Nilai dan beberapa Jenis Objek. dim str as String: str = "value"dan dim str as Worksheet: set str = ActiveWorkbook.worksheets("Sheet1")keduanya bekerja berulang kali. Meskipun, jika saya melakukan Instansiasi objek dim ws as New Worksheet: set ws = ActiveWorkbook.Worksheets("Sheet1")akan keluar seperti operasi tidak valid lainnya di VBA.
GoldBishop

3
Trik usus besar berfungsi dengan penugasan varian dan string. Kata Newkunci tidak. Itu saja yang saya katakan.
John M Gant

2
@JohnMGrant mungkin ingin mengklarifikasi jawaban Anda, ketika saya membacanya, menyatakan: bahwa Anda tidak dapat melakukan tugas baris yang sama dengan inisialisasi konstruktor dan tipe nilai string / varian. Mungkin sedikit membingungkan bagi sebagian orang.
GoldBishop

2

sebenarnya, Anda bisa, tetapi tidak seperti itu.

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

'code...

End Sub

Dan Anda dapat mengatur variabel secara berbeda saat memanggil sub, atau membiarkannya pada nilai standarnya.


5
Ini untuk argumen, bukan variabel lokal.
ivan_pozdeev

1

Dalam beberapa kasus seluruh kebutuhan untuk mendeklarasikan variabel dapat dihindari dengan menggunakan Withpernyataan .

Sebagai contoh,

    Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
    If fd.Show Then
        'use fd.SelectedItems(1)
    End If

ini dapat ditulis ulang sebagai

    With Application.FileDialog(msoFileDialogSaveAs)
      If .Show Then
        'use .SelectedItems(1)
      End If
    End With

0

Anda dapat menentukan dan menetapkan nilai seperti yang ditunjukkan di bawah ini dalam satu baris. Saya telah memberikan contoh dua variabel yang dideklarasikan dan ditugaskan dalam satu baris. jika tipe data dari beberapa variabel sama

 Dim recordStart, recordEnd As Integer: recordStart = 935: recordEnd = 946
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.