Ralat Ketidakcocokan Jenis Argumen VBA ByRef - 3 Sebab & Perbaikan Ralat Teratas

ByRef Argument Type Mismatch dalam Excel VBA

Dalam artikel ini, kami menerangkan ralat yang dihadapi ketika menggunakan Excel VBA ByRef sebagai "Ralat Jenis Argumen Kesalahan." Sebelum itu, izinkan saya memperkenalkan anda kepada "By Ref" terlebih dahulu. Pemboleh ubah adalah kunci untuk sebarang bahasa pengaturcaraan, dan VBA juga tidak berbeza. Kami telah melihat banyak cara untuk menyatakan pemboleh ubah salah satu cara untuk menyatakan pemboleh ubah adalah dengan menggunakan kata-kata "ByRef" dan "ByVal."

Apa maksud ByRef?

"ByRef" bermaksud "Dengan Rujukan" menggunakan kata ini, kita benar-benar dapat menyampaikan argumen ke prosedur (untuk kedua sub & fungsi) dengan merujuk. Ini tidak seperti saudaranya "By Val," yang tidak fleksibel tetapi tetap sifatnya.

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

Kod:

Sub Macro1 () Dim A Long A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 Sub Akhir

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

Tekan kekunci F8 untuk menangkap nilai pemboleh ubah "A" sebagai 50.

Baris kod seterusnya mengatakan "Macro2 A," iaitu, nama makro kedua dan "A" adalah pemboleh ubah yang ditentukan melalui kata "By Ref".

Seperti yang anda lihat di atas, pada saat kita menjalankan baris kod "Macro2 A", ia telah beralih ke sub prosedur VBA seterusnya dari prosedur di atas.

Sekarang kita dapat melihat nilai pemboleh ubah "A" adalah 50. Ini kerana sejak kita menggunakan kata "ByRef" untuk menyatakan pemboleh ubah "A", yang sama seperti di Macro1, ia telah menangkap nilai yang kita miliki diberikan kepada pemboleh ubah ini "A" dari Macro1 .

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

Sekarang tekan kekunci F8 sekali lagi untuk melihat nilai pemboleh ubah "A" di kotak mesej di VBA.

Nilai mengatakan 500.

Walaupun nilai yang telah kami tetapkan dalam makro ini (Macro1) adalah 50, dengan menggunakan kata ByRef, kami sebenarnya memicu subprosedur Macro2 dengan mengekalkan nilai pemboleh ubah "A" dari Macro1 dan kemudian melaksanakan nilai A dengan mengalikan 10.

3 Sebab Teratas untuk Ketidakcocokan Jenis VBA Byref Argument

Di atas, kami telah melihat bagaimana "ByRef" berfungsi, tetapi kami pasti akan melakukan beberapa kesalahan yang selalu mengakibatkan melemparkan mesej ralat VBA sebagai "Ketidakcocokan Jenis Argumen ByRef."

Ini kerana banyak sebab, dan di bahagian ini, kami akan menunjukkan kepada anda cara membetulkan ralat ini dan menyahpepijat kodnya.

Sebab Kesalahan # 1 - Nama Pembolehubah yang berbeza

Salah satu sebab utama berlakunya ralat ini di Excel VBA adalah kerana pemboleh ubah yang berlainan dalam dua prosedur. Contohnya, lihat kod di bawah.

Kod:

Sub Macro1 () Dim A Long A = 50 Macro2 B MsgBox A End Sub Sub Macro2 (ByRef A Selagi) B = B * 10 Sub Akhir

Di Macro1, kami telah menggunakan pemboleh ubah "A", dan di Macro2, kami telah menggunakan pemboleh ubah "B". Sekarang, jika anda cuba menjalankan kod, kita akan mendapat Kesalahan VBA sebagai "Ketidakcocokan Jenis Argumen ByRef."

Seperti yang anda lihat di atas, pemboleh ubah "B" telah diserlahkan kerana jenis nama pemboleh ubah adalah ketidakcocokan.

Penyelesaian: Untuk mengatasi masalah ini, kita perlu memastikan bahawa nama pemboleh ubah dalam kedua prosedur itu tepat.

Sebab Ralat 2: Jenis Data Pembolehubah yang berbeza

Walaupun nama pemboleh ubah sama, tetap menyebabkan kesalahan, ini kerana jenis data yang kami tetapkan kepada mereka. Lihat kod di bawah.

Kod:

Sub Macro1 () Dim A As Integer A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A Selagi) A = A * 10 Sub Akhir

Dalam kod di atas, saya telah menyatakan pemboleh ubah "A" sebagai jenis data Integer di Macro1, dan di Macro2 pemboleh ubah yang sama diberikan jenis data sebagai "Long."

Apabila kita menjalankan kod ini, ia akan menyebabkan ralat VBA "ByRef Argument Type Mismatch."

Ini kerana kami telah menetapkan dua jenis data yang berbeza untuk nama pemboleh ubah yang sama.

Penyelesaian: Jenis data harus sama dalam kedua prosedur.

Sebab Ralat 3: Jenis Data Pembolehubah Hilang dalam Satu Makro

Ralat Excel VBA, "Ketidakcocokan Jenis Argumen ByRef," boleh berlaku kerana jenis data yang diberikan dalam satu makro dan tidak ditugaskan dalam makro lain.

Kod:

Sub Macro1 () A = 50 Macro2 A MsgBox A Sub Sub Macro2 Akhir (ByRef A Selagi) A = A * 10 Sub Akhir

Dalam kod Macro1 di atas, saya tidak menyatakan sebarang pemboleh ubah sebaliknya hanya memberikan nilai kepada pemboleh ubah.

Sebaliknya, untuk Macro2, saya telah menyatakan pemboleh ubah "A" selama ini. Sekiranya anda mencuba menjalankan kod ini, ia akan menyebabkan Kesalahan VBA "ByRef Argument Type Mismatch".

Penyelesaian1: Untuk mengelakkan situasi seperti ini, penyelesaian pertama adalah dengan menyatakan pemboleh ubah dalam kedua-dua prosedur dan menetapkan jenis data yang sama.

Penyelesaian2: Penyelesaian alternatif adalah menjadikan perisytiharan pemboleh ubah wajib dengan menambahkan perkataan "Option Explicit" di bahagian atas modul.

Apa yang akan dilakukan ini ialah sebelum menunjukkan Kesalahan VBA "ByRef Argument Type Mismatch", ia sebenarnya meminta kita untuk menyatakan pemboleh ubahnya terlebih dahulu.

Jadi, Option Explicit selalu berguna dalam VBA.

Perkara yang Perlu Diingat

  • ByRef adalah kebalikan dari By Val.
  • ByRef membawa rujukan dari satu prosedur ke prosedur yang lain.
  • Nama pemboleh ubah, jenis data harus sama dalam kedua prosedur tersebut.
  • Setiap pemboleh ubah perlu dinyatakan secara berasingan sekiranya terdapat beberapa pemboleh ubah.

Artikel menarik...