VBA ByRef Argument Type Mismatch Error - 3 Alasan Teratas & Perbaikan Kesalahan

Jenis Argumen ByRef Tidak Cocok di Excel VBA

Dalam artikel ini, kami menjelaskan kesalahan yang ditemui saat menggunakan Excel VBA ByRef sebagai "Kesalahan Ketidakcocokan Jenis Argumen." Sebelum itu, izinkan saya memperkenalkan Anda dengan "By Ref" terlebih dahulu. Variabel adalah kunci untuk bahasa pemrograman apa pun, dan VBA juga tidak berbeda. Kita telah melihat banyak cara untuk mendeklarasikan variabel, salah satu cara untuk mendeklarasikan variabel adalah dengan menggunakan kata "ByRef" dan "ByVal".

Apa Arti ByRef?

"ByRef" berarti "Dengan Referensi" menggunakan kata ini, kita sebenarnya dapat mengirimkan argumen ke prosedur (untuk sub & fungsi) dengan referensi. Ini tidak seperti saudaranya "By Val", yang tidak fleksibel tetapi pada dasarnya tetap.

Untuk memahami ini, mari kita lihat dua makro di bawah ini.

Kode:

Sub Makro1 () Dim A Selama A = 50 Makro2 A MsgBox A Akhir Sub Sub Makro2 (ByRef A Selama) A = A * 10 Akhir Sub

Kami memiliki dua subprosedur di sini bernama Macro1 & Macro2, masing-masing. Untuk memahami ini lebih baik, jalankan makro baris demi baris dengan menekan tombol F8.

Tekan tombol F8 untuk menangkap nilai variabel "A" sebagai 50.

Baris kode berikutnya mengatakan "Makro2 A," yaitu, nama makro kedua dan "A" adalah variabel yang ditentukan melalui kata "Berdasarkan Referensi".

Seperti yang Anda lihat di atas, saat kita mengeksekusi baris kode "Macro2 A", itu telah melompat ke sub prosedur VBA berikutnya dari prosedur di atas.

Sekarang kita bisa melihat nilai variabel "A" adalah 50. Ini karena kita telah menggunakan kata "ByRef" untuk mendeklarasikan variabel "A," yang sama seperti di Macro1, ini telah menangkap nilai yang kita miliki ditetapkan ke variabel ini "A" dari Macro1 .

Sekarang dalam persamaan makro ( Makro2 ) ini mengatakan A = A * 10 yaitu A = 50 * 100. Tekan tombol F8 3 kali untuk kembali ke makro di atas ( Makro1 ).

Sekarang tekan sekali lagi tombol F8 untuk melihat nilai variabel "A" di kotak pesan di VBA.

Nilainya mengatakan 500.

Meskipun nilai yang telah kami tetapkan di makro ini (Makro1) adalah 50, dengan menggunakan kata ByRef, kami sebenarnya memicu subprocedur Macro2 dengan mempertahankan nilai variabel "A" dari Macro1 dan kemudian mengeksekusi nilai A dengan mengalikan 10.

3 Alasan Teratas untuk Ketidakcocokan Jenis Argumen Byref VBA

Di atas, kami telah melihat cara kerja "ByRef", tetapi kami pasti melakukan beberapa kesalahan yang selalu mengakibatkan munculnya pesan kesalahan VBA sebagai "Ketidakcocokan Jenis Argumen ByRef".

Ini karena banyak alasan, dan di bagian ini, kami akan menunjukkan kepada Anda cara memperbaiki kesalahan ini dan men-debug kodenya.

Alasan Kesalahan # 1 - Nama Variabel Berbeda

Salah satu alasan utama di balik mendapatkan kesalahan ini di Excel VBA adalah karena variabel berbeda yang diteruskan dalam dua prosedur. Misalnya, lihat kode di bawah ini.

Kode:

Sub Makro1 () Dim A Selama A = 50 Makro2 B MsgBox A Akhir Sub Makro2 (ByRef A Selama) B = B * 10 Akhir Sub

Di Macro1, kami telah menggunakan variabel "A", dan di Macro2, kami menggunakan variabel "B". Sekarang, jika Anda mencoba menjalankan kode, kita akan mendapatkan Kesalahan VBA sebagai "Ketidakcocokan Jenis Argumen ByRef".

Seperti yang Anda lihat di atas, variabel "B" telah disorot karena jenis nama variabel tidak cocok.

Solusi: Untuk mengatasi masalah ini, kita perlu memastikan bahwa nama variabel di kedua prosedur tersebut sudah tepat.

Alasan Kesalahan 2: Jenis Data Variabel Berbeda

Meskipun nama variabel sama, tetap saja menyebabkan kesalahan, ini karena tipe data yang kita tetapkan padanya. Lihat kode di bawah ini.

Kode:

Sub Makro1 () Dim A Sebagai Integer A = 50 Makro2 A MsgBox A Akhir Sub Sub Makro2 (ByRef A Selama) A = A * 10 Akhir Sub

Dalam kode di atas, saya telah mendeklarasikan variabel "A" sebagai tipe data Integer di Macro1, dan di Macro2 variabel yang sama diberi tipe data sebagai "Long".

Ketika kami menjalankan kode ini, itu akan menyebabkan kesalahan VBA "ByRef Argument Type Mismatch."

Ini karena kami telah menetapkan dua tipe data berbeda untuk nama variabel yang sama.

Solusi: Tipe data harus sama di kedua prosedur.

Alasan Kesalahan 3: Jenis Data Variabel Hilang dalam Satu Makro

Kesalahan VBA Excel, "Ketidakcocokan Tipe Argumen ByRef," bisa terjadi karena tipe data yang ditetapkan di satu makro dan tidak ditetapkan di makro lain.

Kode:

Sub Makro1 () A = 50 Makro2 A MsgBox A End Sub Makro2 (ByRef A Selama) A = A * 10 Akhir Sub

Dalam kode Macro1 di atas, saya belum mendeklarasikan variabel apa pun, melainkan hanya menetapkan nilai ke variabel.

Di sisi lain, untuk Macro2, saya telah mendeklarasikan variabel "A" selama ini. Jika Anda mencoba menjalankan kode ini, ini akan menyebabkan VBA Error "ByRef Argument Type Mismatch".

Solusi1: Untuk menghindari situasi semacam ini, solusi pertama adalah mendeklarasikan variabel di kedua prosedur dan menetapkan tipe data yang sama.

Solusi2: Solusi alternatif adalah membuat deklarasi variabel wajib dengan menambahkan kata "Opsi Eksplisit" di bagian atas modul.

Apa yang akan dilakukan adalah sebelum menampilkan VBA "ByRef Argument Type Mismatch," Error, sebenarnya meminta kita untuk mendeklarasikan variabel terlebih dahulu.

Jadi, Option Explicit selalu berguna dalam VBA.

Hal-hal untuk diingat

  • ByRef adalah kebalikan dari By Val.
  • ByRef membawa referensi dari satu prosedur ke prosedur lainnya.
  • Nama variabel, tipe data harus sama di kedua prosedur.
  • Setiap variabel harus dideklarasikan secara terpisah untuk beberapa variabel.

Artikel yang menarik...