Cara menggunakan variabel dalam sub-prosedur Excel di Visual Basic for Applications

Pendahuluan

Artikel ini menguraikan cara menggunakan variabel dalam sub-prosedur Microsoft Excel di Microsoft Visual Basic for Applications.

Informasi Selengkapnya

Variabel dalam sub prosedur

Fitur canggih bahasa pemrograman adalah kemampuan untuk menyimpan sesuatu dalam variabel sehingga konten variabel dapat digunakan atau dapat diubah nanti dalam prosedur. Dokumen ini membahas penggunaan variabel berikut dalam Visual Basic:

  • Bagaimana variabel dideklarasikan.
  • Prosedur dan proyek yang dapat menggunakan variabel.
  • Seumur hidup variabel.

Mendeklarasikan variabel dalam makro

Cara termedah untuk mendeklarasikan variabel dalam makro adalah menggunakan pernyataan Dim. Baris berikut ini mendeklarasikan dua variabel, sebagai bilangan bulat:

    Dim x As Integer, y As Integer

Dengan x dan y ditentukan sebagai bilangan bulat, Anda memberi tahu Visual Basic untuk mengesampingkan memori yang cukup untuk variabel bilangan bulat (masing-masing 2 byte untuk x dan y) dan bahwa informasi yang disimpan di x atau y adalah bilangan bulat antara -32768 dan 32767.

CATATAN: Jika Anda mendeklarasikan lebih dari satu variabel dengan menggunakan satu pernyataan Dim, Anda harus menentukan tipe data untuk setiap variabel.

Jika Anda tidak menentukan tipe data untuk setiap variabel, seperti dalam kode Visual Basic berikut ini, hanya variabel y yang disiapkan sebagai variabel bilangan bulat. Variabel x akan berupa tipe varian:

    Dim x, y As Integer

Untuk informasi tambahan, lihat Tipe data varian di bawah ini.
 

Untuk melakukan uji variabel, ikuti langkah-langkah ini:

  1. Simpan dan tutup buku kerja yang terbuka, lalu buka buku kerja baru.

  2. Mulai Editor Visual Basic (tekan ALT+F11).

  3. Pada menu Sisipkan , klik Modul.

  4. Ketik kode berikut:

    Sub Variable_Test()
        Dim x Sebagai Bilangan Bulat, y Sebagai Bilangan Bulat
        x = 10
        y = 100
        MsgBox "nilai x adalah " & x & _
        Chr(13) & "nilai y adalah " & y
    End Sub

  5. Jalankan makro Variable_Test . Anda menerima pesan berikut:

    the value of x is 10
    the value of y is 100

  6. Klik OK.

  7. Dalam makro Variable_Test ubah baris berikut:

    x = 10

  8. Untuk:

    x = "error"

  9. Jalankan makro Variable_Test .

Anda akan menerima kesalahan run-time karena "kesalahan" bukan bilangan bulat, dan Anda mencoba menetapkan nilai string ini ke variabel bilangan bulat x.
 

Ringkasan tipe data

Berikut adalah tipe data variabel umum:

tipe data variabel umum

tipe data Varian

Jika Anda tidak menentukan tipe data saat Anda mendeklarasikan variabel, atau Anda tidak mendeklarasikan variabel sama sekali, Visual Basic secara otomatis menentukan tipe data varian untuk variabel ini. Berikut ini adalah keuntungan dari variabel yang dideklarasikan sebagai tipe data ini:

  • Variabel dapat berisi nilai string, tanggal, waktu, Boolean, atau numerik.
  • Variabel dapat mengonversi nilai yang dikandungnya secara otomatis.

Kerugiannya adalah bahwa variabel varian memerlukan setidaknya 16 byte memori. 16 byte memori dapat signifikan dalam prosedur besar atau dalam modul yang kompleks.

Untuk melihat cara kerjanya dalam makro Variable_Test, ikuti langkah-langkah ini:

Ubah kode dalam makro Variable_Test menjadi:


Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

Jalankan makro Variable_Test .

Anda tidak akan menerima kesalahan karena Anda bisa menetapkan apa pun ke varian variabel x dan y.

CATATAN: Anda juga bisa meninggalkan baris berikut ini dan makro masih akan berfungsi sebagai variabel x dan y diperlakukan sebagai tipe data Varian:

    Dim x, y

Lingkup variabel

Saat Anda mendeklarasikan variabel, variabel mungkin atau mungkin tidak terlihat oleh makro lain dalam modul yang sama, di modul lain, atau di proyek lain. Ketersediaan variabel dalam modul ini disebut sebagai lingkup. Ketiga tipe lingkup tersebut adalah tingkat prosedur, tingkat modul privat, dan tingkat modul publik. Lingkup tergantung pada bagaimana dan di mana Anda mendeklarasikan variabel atau variabel Anda.

Lingkup tingkat prosedur

Variabel dengan lingkup tingkat prosedur tidak terlihat di luar prosedur di mana ia dideklarasikan. Jika Anda mengatur nilai variabel yang memiliki lingkup tingkat prosedur, konten variabel tersebut tidak akan terlihat oleh makro lain.

Untuk memverifikasi bahwa variabel dengan lingkup tingkat prosedur tidak terlihat di luar prosedur di mana variabel tersebut dideklarasikan, ikuti langkah-langkah ini:

  1. Sisipkan modul baru ke proyek Anda.

  2. Ketik kedua makro berikut ini ke dalam modul ini:
      Sub Makro1() Dim x Sebagai Bilangan Bulat x = 10 MsgBox "x, seperti yang dilihat oleh Makro1 adalah " & x 'baris berikutnya menjalankan Makro2 Makro2 End Sub Makro2 Sub Makro2() MsgBox "x, seperti yang dilihat oleh Makro2 adalah " & x End Sub

  3. Jalankan Makro1, dan Anda akan mendapatkan pesan berikut:

    x, as seen by Macro1 is 10

  4. Klik OK, dan Anda akan mendapatkan pesan berikut:

    x, as seen by Macro2 is

  5. Klik OK.

Makro2 tidak menampilkan nilai untuk variabel x karena variabel x lokal untuk Makro1.

Lingkup tingkat modul publik dan privat

Anda dapat menentukan variabel dalam bagian deklarasi modul (di bagian atas modul, di atas semua sub prosedur), dan mengatur lingkup variabel Anda dengan menggunakan pernyataan Publik, pernyataan Dim, atau pernyataan Privat. Jika Anda meletakkan pernyataan Publik di depan variabel Anda, variabel Anda akan tersedia untuk semua makro di semua modul dalam proyek. Jika Anda meletakkan pernyataan Dim atau pernyataan Privat di depan variabel Anda, variabel Anda hanya tersedia untuk makro dalam modul tempatnya dideklarasikan.

Untuk melihat perbedaan antara pernyataan Publik dan pernyataan Dim, ikuti langkah-langkah ini:

  1. Simpan dan tutup buku kerja apa pun yang terbuka lalu buka buku kerja baru.

  2. Mulai Visual Basic Editor.

  3. Sisipkan modul ke proyek Anda.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
         x = 10
         MsgBox x
         Macro_1b
    End Sub
    Sub Macro_1b()
         x = x * 2
         MsgBox x
         Macro2
    End Sub
    
  5. Sisipkan modul lain ke proyek Anda.

  6. Ketik kode berikut ke dalam modul ini:
    Sub Macro2()
        x = x * 3
        MsgBox x
    End Sub

  7. Jalankan makro Macro_1a dalam modul pertama.

  8. Dengan variabel x dideklarasikan sebagai "Public x As Integer", ketiga makro dalam proyek memiliki akses ke nilai x. Kotak pesan pertama menampilkan nilai 10. Kotak pesan kedua menampilkan nilai 20 (karena x dikalikan dengan 2 dalam Macro_1b). Kotak pesan ketiga menampilkan nilai 60 (karena nilai x diubah menjadi 20 dalam Macro_1b lalu dikalikan dengan 3 di Makro2).

  9. Ubah baris deklarasi dalam modul pertama dari:

       Public x As Integer

    Untuk:

       Dim x As Integer

  10. Jalankan makro Macro_1a .

  11. Dengan variabel x dideklarasikan sebagai "Dim x Sebagai Bilangan Bulat", hanya makro dalam modul pertama yang memiliki akses ke nilai x. Jadi kotak pesan pertama menampilkan nilai 10, kotak pesan kedua menampilkan nilai 20, (karena x dikalikan dengan 2 dalam Macro_1b) dan kotak pesan ketiga menampilkan nilai 0 (karena Makro2 tidak melihat nilai x dan nilai nol yang tidak diinisialisasi digunakan oleh Makro 2).

  12. Ubah baris deklarasi dalam modul pertama dari:

      Dim x As Integer

    Untuk:

        Private x As Integer

  13. Jalankan makro Macro_1a .

  14. Kotak pesan yang sama ditampilkan dengan menggunakan lingkup Pernyataan privat saat menggunakan pernyataan Dim. Variabel x memiliki lingkup yang sama, privat ke modul tempatnya dideklarasikan.

CATATAN: Jika Anda ingin lingkup variabel Anda terbatas pada modul tempat variabel dideklarasikan, gunakan Privatestatement, bukan pernyataan Dim. Keduanya mendapatkan efek yang sama, tetapi lingkupnya lebih jelas saat Anda membaca kode jika Anda menggunakan pernyataan Pribadi.
 

Seumur hidup variabel

Waktu di mana variabel mempertahankan nilainya dikenal sebagai masa pakainya. Nilai variabel dapat berubah selama masa pakainya tetapi akan mempertahankan nilai. Selain itu, ketika variabel kehilangan lingkup, variabel tidak lagi memiliki nilai.
 

Menginisialisasi nilai variabel

Saat Anda menjalankan makro, semua variabel diinisialisasi menjadi nilai. Variabel numerik diinisialisasi menjadi nol, string panjang variabel diinisialisasi menjadi string panjang-nol (""), dan string panjang tetap diisi dengan kode ASCII 0. Variabel varian diinisiasi menjadi Kosong. Variabel Kosong dinyatakan oleh nol dalam konteks numerik dan string panjang-nol ("") dalam konteks string.

Variabel tingkat prosedur

Jika Anda memiliki variabel yang dideklarasikan dalam makro dengan menggunakan pernyataan Dim, variabel mempertahankan nilainya selama makro berjalan. Jika makro ini memanggil makro lain, nilai variabel dipertahankan (tidak tersedia untuk makro lain) selama makro lain ini juga berjalan.

Untuk menunjukkan cara kerja variabel tingkat prosedur, ikuti langkah-langkah ini:

  1. Sisipkan modul baru ke proyek Anda.

  2. Ketik kedua makro berikut ini ke dalam modul ini:

    Sub Macro1()
        'set x sebagai variabel tingkat prosedur
       Dim x Sebagai Bilangan Bulat
       MsgBox "nilai awal x adalah " & x
       x = 10
        MsgBox "x is " & x
        'baris berikutnya menjalankan Makro2
        Makro2
        MsgBox "x masih " & x
    End Sub
    Sub Makro2()
        MsgBox "x, seperti yang dilihat oleh Makro2 adalah " & x
    End Sub

  3. Jalankan Makro1.

  4. Anda menerima pesan berikut:

        the initialized value of x is 0

  5. Klik OK, dan Anda akan mendapatkan pesan:

     x is 10

  6. Klik OK, dan Anda akan mendapatkan pesan berikut:

    x, as seen by Macro2 is

  7. Klik OK.

  8. Makro2 tidak menampilkan nilai untuk variabel x karena variabel x lokal untuk Makro1. Anda mendapatkan pesan berikut:

    x is still 10

  9. Klik OK.

  10. Jalankan Makro1.

Anda menerima pesan yang sama yang dijelaskan dalam langkah 3 sampai 6 karena segera setelah Makro1 berhenti berjalan di Langkah 6, nilai variabel x hilang. Oleh karena itu, saat Anda menjalankan ulang Makro1 di Langkah 7, pesan pertama memperlihatkan nilai x sebagai nol (nilai yang diinisialisasi).

Kata kunci statis

Jika variabel tingkat prosedur dideklarasikan dengan menggunakan kata kunci Statis, variabel mempertahankan nilainya hingga proyek Anda diatur ulang. Oleh karena itu, jika Anda memiliki variabel statis, kali berikutnya Anda memanggil prosedur Anda, variabel statis diinisialisasi ke nilai terakhirnya.

Untuk melihat cara kerja kata kunci Statis, ikuti langkah-langkah ini:

1.

Change the code in Macro1 to:

Sub Macro1()
    'set x as a procedure level variable
    Static x As Integer
       MsgBox "the initialized value of x is " & x
    x = x + 10
    MsgBox "x is " & x
End Sub
  1. Jalankan Makro1.

  2. Anda akan mendapatkan pesan:

    the initialized value of x is 0

  3. Klik OK, dan Anda akan mendapatkan pesan:

    x is 10

  4. Klik OK.

  5. Jalankan Makro1, dan Anda mendapatkan pesan berikut:

    the initialized value of x is 10

  6. Klik OK, dan Anda akan mendapatkan pesan berikut:

    x is 20

  7. Klik OK.

Nilai yang muncul dalam pesan berbeda kali kedua karena variabel x dideklarasikan sebagai variabel statis dan variabel mempertahankan nilainya setelah Anda menjalankan Makro1 pada kali pertama.

CATATAN: Jika Anda memiliki variabel tingkat modul, masa pakainya sama seperti variabel tingkat prosedur statis.

Untuk memverifikasi seumur hidup variabel tingkat modul, ikuti langkah-langkah berikut:

1.

Change the code in the module that contains Macro1 to the following:

Dim x As Integer  'create a module-level variable
Sub Macro1()
   MsgBox "the initialized value of x is " & x
   x = x + 10
   MsgBox "x is " & x
End Sub
  1. Jalankan Makro1, dan Anda akan mendapatkan pesan berikut:

    the initialized value of x is 0

  2. Klik OK, dan Anda akan mendapatkan pesan berikut:

    x is 10

  3. Klik OK,

  4. Jalankan Makro1, dan Anda akan mendapatkan pesan ini:

    the initialized value of x is 10

  5. Klik OK.

  6. Anda menerima pesan berikut:

    x is 20

  7. Klik OK.

Nilai yang muncul dalam pesan berbeda kali kedua karena variabel x dideklarasikan sebagai variabel statis dan mempertahankan nilainya setelah Anda menjalankan Makro1 pada kali pertama.
 

Mengatur ulang proyek untuk mereset variabel

Jika Anda ingin mengatur ulang nilai untuk variabel statis atau untuk variabel tingkat modul, klik tombol Reset pada
Bar alat standar, atau klik Reset pada menu Jalankan .

Jika Anda melakukan ini untuk proyek Makro1 lalu menjalankan ulang Makro1, nilai variabel x diinisialisasi kembali ke nol dan Anda menerima pesan pertama:

    the initialized value of x is 0