VBA ByVal - Bagaimana cara menggunakan ByVal Function Argument? (Contoh)

Hujah Fungsi ByVal Excel VBA

ByVal adalah pernyataan dalam VBA. ByVal bermaksud By Value iaitu ketika subprosedur dipanggil dari prosedur nilai pemboleh ubah diset semula ke nilai baru dari prosedur baru yang dipanggil.

Di VBA, ketika kita bekerja dengan fungsi yang dipanggil dalam fungsi yang berlainan, ada keadaan tertentu bahawa nilai untuk argumen asal diubah ketika fungsi tersebut dipanggil; pernyataan byval melarang prosedur atau kod mengubah nilai untuk argumen.

Saya tahu tidak mudah difahami dengan membaca penjelasannya, tetapi dengan contoh praktik fungsi, kita sebenarnya dapat memahami dengan lebih baik.

Bagaimana cara menggunakan ByVal Argument di VBA?

Contoh # 1

Sebagai contoh, lihat kod VBA di bawah.

Kod:

Sub Macro1 () Dim k As Integer k = 50 Macro2 k MsgBox k End Sub
Sub Makro2 (ByVal k Sebagai Integer) k = k + 5 Sub Akhir

Dalam dua prosedur makro di atas, kita mempunyai pemboleh ubah umum "k" merentasi prosedur. Izinkan saya menerangkannya secara terperinci sebelum kita melihat hasilnya.

Pada Makro pertama, kami telah menetapkan nilai 50 pada pemboleh ubah "k."

Dim k Sebagai Integer k = 50

Seterusnya, kami telah memanggil prosedur makro kedua dari Makro pertama.

Makro2 k

Di Macro2, kami telah menetapkan semula nilai pemboleh ubah ke k = k + 5. Dalam makro ini, kami telah menggunakan argumen ByVal untuk menetapkan nilai ke pemboleh ubah "k."

Sekarang untuk memahami "ByVal", mari jalankan kod VBA baris demi baris dengan menekan kekunci F8.

# 1 - Setelah menekan kekunci F8 terlebih dahulu, ia akan menyerlahkan baris pertama Macro1.

Pada titik waktu ini, letakkan kursor pada pemboleh ubah "k," dan ia harus menunjukkan nilai pemboleh ubah "k."

Pada masa ini, nilai "k" adalah sifar.

# 2 - Tekan kekunci F8 sekali lagi, dan ia akan melompat ke baris ketiga.

Walaupun sekarang, nilai "k" masih sifar.

# 3 - Tekan kekunci F8 sekarang dan lihat nilai k.

Oleh kerana nilai "k" ditetapkan ke 50 dan kod dijalankan dan nilai menunjukkan sebagai 50.

# 4 - Sekarang, garis yang disorot adalah "Macro2 k," iaitu, dengan menekan kekunci F8, ia akan melompat ke prosedur kedua, Macro2.

# 5 - Walaupun sekarang, nilai pemboleh ubah "k" dalam prosedur ini juga menunjukkan sebagai 50. Tetapi di dalam makro ini, kita menetapkan semula nilai pemboleh ubah "k" sebagai k = k + 5 iaitu, 55. Sekarang tekan Kekunci F8 dua kali lagi.

Seperti yang anda lihat di atas, nilai "k" adalah 55 sekarang.

# 6 - Tekan kekunci F8, dan ia akan kembali ke prosedur Macro1.

Apabila makro kembali ke prosedur asal Macro1, nilai "k" pemboleh ubah kita tidak lagi 55 sebaliknya nilai asal dalam prosedur ini iaitu, 50.

Apabila anda menekan kekunci F8, kami hanya dapat melihat 50 di kotak mesej di VBA.

Jadi, seperti yang telah kami katakan di awal artikel, argumen "ByVal" tidak membawa nilai dari satu prosedur ke prosedur yang lain, walaupun membawa nilai pemboleh ubah dari makro pertama ke detik pada saat ia menemui garis " ByVal ”apabila kembali ke makro asal, ia menetapkan semula nilai menjadi nilai asal dalam prosedur sahaja.

Contoh # 2

Sekarang lihat dua makro di bawah ini.

Kod:

Sub P1 () Dim k As Integer: k = 10 Panggil P2 (k) MsgBox k End Sub
Sub P2 (ByVal k Sebagai Integer) k = 15 Sub Akhir
  • Ini serupa dengan contoh pertama. Dalam makro "P1", kami telah menetapkan nilai 10 untuk pemboleh ubah "k," dan dalam makro yang sama "P1", kami telah memanggil makro kedua "P2" dengan pemboleh ubah "k."
  • Dalam makro kedua "P2", kami telah menggunakan argumen ByVal, dan kali ini, nilai pemboleh ubah "k" adalah 15.

Makro ini membawa nilai pemboleh ubah "k" sebagai sepuluh dari makro "P1" hingga makro "P2", dan dalam makro ini, nilainya akan diset semula ke 15, tetapi ketika kembali untuk menyelesaikan makro ke makro pertama "P1" nilai "k" kembali ke 10, bukan 15.

Perkara yang Perlu Diingat

Argumen ByVal tidak mempengaruhi nilai pemboleh ubah walaupun setelah menjalankan makro, tetapi dengan argumen By Ref, kita dapat membawa nilai pemboleh ubah dari satu makro ke makro yang lain.

Artikel menarik...