VBA ByRef Bağımsız Değişken Türü Uyuşmazlığı Hatası - İlk 3 Neden ve Hata Düzeltmeleri

Excel VBA'da ByRef Bağımsız Değişken Türü Uyuşmazlığı

Bu makalede, Excel VBA ByRef'i kullanırken karşılaşılan hatayı "Bağımsız Değişken Türü Uyuşmazlığı Hatası" olarak açıklıyoruz. Ondan önce, önce sizi "Ref" ile tanıştırayım. Değişkenler herhangi bir programlama dilinin anahtarıdır ve VBA da farklı değildir. Değişkenleri bildirmenin birçok yolunu gördük, değişkenleri bildirmenin bu yollarından biri de "ByRef" ve "ByVal" sözcüklerini kullanmaktır.

ByRef Ne Anlama Geliyor?

"ByRef", bu kelimeyi kullanarak "Referansla" anlamına gelir, aslında argümanları referans olarak prosedürlere (hem alt hem de işlev için) iletebiliriz. Bu, esnek olmayan ancak doğası gereği sabit olan kardeşi "By Val" den farklıdır.

Bunu anlamak için aşağıdaki iki makroya bir göz atalım.

Kod:

Alt Makro1 () Dim A As Long A = 50 Makro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Burada sırasıyla Macro1 ve Macro2 adında iki alt prosedürümüz var. Bunu daha iyi anlamak için F8 tuşuna basarak makroyu satır satır çalıştırın.

"A" değişkeninin değerini 50 olarak yakalamak için F8 tuşuna basın.

Bir sonraki kod satırı "Makro2 A" diyor, yani ikinci makronun adı ve "A", "Ref" kelimesiyle tanımlanan değişkendir.

Yukarıda görebileceğiniz gibi, "Macro2 A" kod satırını çalıştırdığımız anda, yukarıdaki prosedürden bir sonraki VBA alt prosedürüne atladı.

Şimdi "A" değişkeninin değerinin 50 olduğunu görebiliriz. Bunun nedeni, "ByRef" kelimesini Macro1'deki ile aynı olan "A" değişkenini bildirmek için kullandığımız için , sahip olduğumuz değeri yakalamasıdır. Bu değişken “A” atanmış Macro1 .

Şimdi bu makro (içinde Macro2 ) denkleminde diyor A = A * 10 yani A = 50 * 100. Basın 3 kez yukarıdaki makro (geri dönmek için F8 tuşuna Macro1 ).

Şimdi VBA'daki mesaj kutusunda "A" değişkeninin değerini görmek için bir kez daha F8 tuşuna basın.

Değer 500 diyor.

Bu makroda (Macro1) atadığımız değer 50 olmasına rağmen, ByRef kelimesini kullanarak, aslında Macro1'den “A” değişkeninin değerini koruyarak ve ardından 10'u çarparak A'nın değerini çalıştırarak Macro2 alt prosedürünü tetikledik.

VBA Byref Bağımsız Değişken Türü Uyuşmazlığının İlk 3 Nedeni

Yukarıda, "ByRef" in nasıl çalıştığını gördük, ancak her zaman "ByRef Bağımsız Değişken Türü Uyuşmazlığı" olarak bir VBA hata mesajı atılmasına neden olan bazı hataları yapmak zorundayız.

Bunun birçok nedeni vardır ve bu bölümde size bu hatayı nasıl düzelteceğinizi ve kodda nasıl hata ayıklayacağınızı göstereceğiz.

Hata Nedeni # 1 - Farklı Değişken Adları

Excel VBA'da bu hatayı almanın ana nedenlerinden biri, iki prosedürde geçirilen farklı değişkenlerden kaynaklanmaktadır. Örneğin, aşağıdaki kodlara bakın.

Kod:

Alt Makro1 () Kıs A As Uzun A = 50 Makro2 B Mesaj Kutusu A Son Alt Alt Makro2 (ByRef A As Long) B = B * 10 End Sub

Macro1'de "A" değişkenini, Macro2'de ise "B" değişkenini kullandık. Şimdi, kodu çalıştırmayı denerseniz, "ByRef Bağımsız Değişken Türü Uyuşmazlığı" olarak VBA Hatası alacağız.

Yukarıda görebileceğiniz gibi, "B" değişkeni vurgulanmıştır çünkü değişken adı türü bir uyumsuzdur.

Çözüm: Bu sorunun üstesinden gelmek için, her iki prosedürdeki değişken adlarının tam olduğundan emin olmamız gerekir.

Hata Nedeni 2: Farklı Değişken Veri Türleri

Değişken isimleri aynı olsa da yine de bir hataya neden oluyor, bunun nedeni onlara atadığımız veri tipidir. Aşağıdaki koda bakın.

Kod:

Alt Makro1 () Dim A As Tamsayı A = 50 Makro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Yukarıdaki kodlarda, Macro1'de Tamsayı veri türü olarak "A" değişkenini tanımladım ve Macro2'de aynı değişkene "Uzun" veri türü atandı.

Bu kodu çalıştırdığımızda, "ByRef Bağımsız Değişken Türü Uyuşmazlığı" VBA hatası oluşacaktır.

Bunun nedeni, aynı değişken adı için iki farklı veri türü atamış olmamızdır.

Çözüm: Veri türü her iki prosedürde de aynı olmalıdır.

Hata Nedeni 3: Bir Makroda Eksik Değişken Veri Türleri

Excel VBA Hatası, "ByRef Bağımsız Değişken Türü Uyuşmazlığı", bir makroya atanan ve başka bir makroya atanmayan veri türü nedeniyle meydana gelebilir.

Kod:

Alt Makro1 () A = 50 Makro2 A Mesaj Kutusu A Son Alt Alt Makro2 (ByRef A As Long) A = A * 10 End Sub

Yukarıdaki Macro1 kodunda, herhangi bir değişkeni tanımlamadım, daha ziyade değeri değişkene atadım.

Öte yandan, Macro2 için "A" değişkenini uzun olarak tanımladım. Bu kodu çalıştırmayı denerseniz, "ByRef Bağımsız Değişken Türü Uyuşmazlığı" VBA Hatasına neden olur.

Çözüm 1: Bu tür durumlardan kaçınmak için ilk çözüm, değişkeni her iki prosedürde de bildirmek ve aynı veri türünü atamaktır.

Çözüm2: Alternatif bir çözüm, modülün üst kısmına "Açık Seçenek" kelimesini ekleyerek değişken bildirimini zorunlu kılmaktır.

Bunun yapacağı şey, VBA "ByRef Argüman Türü Uyuşmazlığı" Hatasını göstermeden önce, aslında bizden değişkeni ilk olarak bildirmemizi istemesidir.

Bu nedenle, Option Explicit her zaman VBA'da kullanışlıdır.

Hatırlanacak şeyler

  • ByRef, By Val'in tersidir.
  • ByRef referansı bir prosedürden diğerine taşır.
  • Değişken adı, veri türü her iki prosedürde de aynı olmalıdır.
  • Birden çok değişken olması durumunda her değişkenin ayrı ayrı bildirilmesi gerekir.

Ilginç makaleler...