VBA ByRef Argument Type Mismatch

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 “Berdasarkan Referensi”, dengan 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 sifatnya 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 yang masing-masing disebut sebagai Makro1 & Makro2. 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 “Macro2 A” yaitu nama makro kedua dan “A” adalah variabel yang ditentukan melalui kata “By Ref”.

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

Sekarang kita dapat melihat nilai variabel "A" adalah 50 hal ini karena karena kita telah menggunakan kata "ByRef" untuk mendeklarasikan variabel "A" yang sama seperti di Macro1 telah menangkap nilai yang telah kita tetapkan ke variabel ini " A ”dari Macro1 .

Sekarang dalam persamaan makro ini ( Makro2 ) 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 kita tetapkan dalam makro ini (Makro1) adalah 50, dengan menggunakan kata ByRef kita sebenarnya memicu sub prosedur Macro2 dengan mempertahankan nilai variabel "A" dari Makro1 dan kemudian mengeksekusi nilai A dengan mengalikan 10.

3 Alasan Teratas untuk Ketidakcocokan Jenis Argumen Byref VBA

Di atas kita telah melihat bagaimana "ByRef" bekerja tapi kita pasti membuat beberapa kesalahan yang selalu mengakibatkan munculnya pesan kesalahan VBA sebagai "ByRef Argument Type Mismatch".

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

Anda dapat mengunduh Template Excel Ketidakcocokan Jenis Argumen VBA ByRef di sini - Template Excel Tidak Cocok VBA ByRef Jenis Argumen

Alasan Kesalahan # 1 - Nama Variabel Berbeda

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

Kode:

 Sub Makro1 () Dim A Selama A = 50 Makro2 B MsgBox A Akhir Sub 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 untuk menjalankan kode kita akan mendapatkan VBA Error sebagai "ByRef Argument Type Mismatch".

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 tepat.

Alasan Kesalahan 2: Jenis Data Variabel Berbeda

Meskipun nama variabel tetap sama, hal itu 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 kita menjalankan kode ini, maka akan menyebabkan error 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 nilainya ke variabel.

Di sisi lain untuk Macro2 saya telah mendeklarasikan variabel "A" selama ini. Jika Anda mencoba menjalankan kode ini, itu 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 Error "ByRef Argument Type Mismatch" VBA sebenarnya meminta kita untuk mendeklarasikan variabel terlebih dahulu.

Jadi, Option Explicit selalu berguna di 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.