EXCEL VBA BYREF ARGÜMAN TÜRÜ UYUŞMAZLIĞI

ByRef Excel VBA'da argüman türü uyuşmazlığı?

Excel VBA'da, “ByRef argüman türü uyuşmazlığı” hatası, bir prosedür veya fonksiyon, prosedür veya fonksiyonun parametresi olarak tam veri türünde olmayan bir argümanla çağrıldığında ve argüman referansla (anahtar sözcük “ByRef” kullanılarak) geçirildiğinde oluşur.

Örneğin, aşağıdaki kodu ele alalım. Bu kodda, "test" prosedürü referansla geçirilen bir dize parametresi alır, ancak "main" alt bölümünde, "test" prosedürüne argüman olarak bir tamsayı değişkeni "num" geçirilir. "num" bir dize olmadığından, VBA ByRef Argüman Türü Uyuşmazlığı hatası oluşur.

VBA ByRef Argüman Türü Uyuşmazlığı Giriş

Kod çalıştırıldığında aşağıdaki hatayı alırsınız:

VBA ByRef Argüman Türü Uyuşmazlığı - Hata

Bu hatayı düzeltmek için, geçirilen argümanın veri türünün, prosedür veya fonksiyon parametresinin veri türüyle eşleştiğinden emin olmalısınız. Bu durumda, "num" değişkeninin veri türünü bir dizeye değiştirebilir ve kodu çalıştırabilirsiniz.

VBA ByRef Argüman Türü Uyuşmazlığı Giriş - kod
Giriş - Çıktı.jpg

ByRef ne anlama geliyor?

VBA'da (Visual Basic for Applications) ByRef, "başvuru yoluyla" anlamına gelir. Bir parametre bir alt yordama veya fonksiyona başvuru yoluyla geçirildiğinde, değerinin bir kopyası yerine bellekteki orijinal değişkene bir başvuru alır.

Bu, alt rutin veya fonksiyon içindeki parametrede yapılan herhangi bir değişikliğin, bunun dışındaki orijinal değişkeni de etkileyeceği anlamına gelir. Öte yandan, bir parametre değere göre geçirildiğinde, değişkenin değerinin bir kopyası alt rutine veya fonksiyona geçirilir ve alt rutin veya fonksiyon içindeki parametrede yapılan herhangi bir değişiklik, alt rutin veya fonksiyon dışındaki orijinal değişkeni etkilemez.

Varsayılan olarak, VBA parametreleri referansla geçirir, bu nedenle "ByRef" anahtar sözcüğü öyle değildir. Ancak, parametre listesindeki "ByRef" anahtar sözcüğünü kullanarak bir parametrenin referansla geçirileceğini açıkça bildirebilirsiniz.

İşte referansla bir parametre kabul eden bir alt rutin örneği:

Tür Uyuşmazlığı - altyordam

Bu örnekte, “ str ” parametresi “ ByRef ” anahtar sözcüğü kullanılarak referansla geçirilir .

Alt program bir dize değişkenini argüman olarak kullanarak çağrıldığında, dize yeni değişkene başlatılır ve yeni dize yazdırılır.

Bunu kullanan başka bir alt rutini tanımlayarak çıktıyı hemen yanındaki sekmeye yazdırır.

başka bir altyordam.jpg

Çıktı şu şekilde olacaktır:

Giriş - Çıktı.jpg

VBA ByRef Argüman türü Uyuşmazlığı için En Önemli 3 Neden

VBA ByRef argüman türü uyumsuzluğu hatasının başlıca nedenlerine bir göz atalım:

#1 – Veri Türü Uyuşmazlığı: “ByRef argüman türü uyuşmazlığı” hatasının en yaygın nedeni, alt yordama veya fonksiyona geçirilen argüman ile beklenen parametre türü arasındaki VBA değişkeni veri türü uyuşmazlığıdır.

Örneğin, bir alt rutin bir dize parametresi bekliyor, ancak ona bir tam sayı geçiriliyor. Bu durumda, bir VBA ByRef argüman türü uyumsuzluğu tam sayısı olduğu anlamına gelir ve bu da “ByRef argüman türü uyumsuzluğu” hatasının oluşmasına neden olur.

#2 – Boş Değerler: “ByRef argüman türü uyumsuzluğu” hatasının bir diğer yaygın nedeni, alt yordama veya fonksiyona argüman olarak boş değerlerin geçirilmesidir.

Tarihler veya sayısal değerler gibi bazı veri türleri boş değerleri işleyemez ve bunları argüman olarak geçirmeye çalışmak “ByRef argüman türü uyuşmazlığı” hatasına yol açabilir.

#3 – Yanlış Fonksiyon Çağrısı: “ByRef argüman türü uyumsuzluğu” hatası bazen yanlış fonksiyon veya alt rutin çağrıları nedeniyle oluşur. Örneğin, bir fonksiyon çok az veya çok fazla argümanla çağrılırsa veya argümanlar yanlış sıradaysa, “ByRef argüman türü uyumsuzluğu” hatası oluşabilir.

Fonksiyonun veya alt yordamın doğru sayıda argümanla ve doğru sırada çağrıldığından emin olmak önemlidir.

“ByRef argüman türü uyumsuzluğu” hatasının belirli nedenini belirleyerek sorunu düzeltebilir ve tekrar oluşmasını önleyebilirsiniz. Şimdi bu hatanın neden oluştuğuna dair bazı örneklere bakalım.

Hata Nedeni 1 – Farklı Değişken Adları

VBA'da "ByRef argüman türü uyumsuzluğu" hatası aldığınızı varsayalım. Bu durumda, bu genellikle bir alt yordama veya işleve geçirdiğiniz argümanın veri türünün, alt yordam veya işlev başlığında bildirilen parametrenin veri türüyle eşleşmediği anlamına gelir.

Ancak, veri türleri eşleşse bile ancak değişken adları farklı olsa bile bu hatayı almak mümkündür. Örneğin, bir değişkeni alt yordama veya işlev başlığında kullanılandan farklı bir ad kullanarak bir alt yordama veya işleve geçirdiğinizde bu durum meydana gelebilir.

Aşağıdaki kodu inceleyin:

VBA ByRef Argüman Türü Uyuşmazlığı - Hata Nedeni 1 - Kod

Bu kodda, MultiplyNumberByThree() alt yordamı, girilen sayının üç katını döndüren tamsayı veri türündeki bir 'x' değişkenine başvurur.

Ancak, PrintProduct() alt rutinine geçtiğimizde yanlış 'num' değişkeninin referans alındığını görebiliriz.

VBA ByRef argüman türü uyumsuzluğu dizisini yazdıracaktır:

VBA ByRef Argüman Türü Uyuşmazlığı - Hata

Bu hata, bir alt rutinde veya fonksiyonda kullanılan değişkenin fonksiyon başlığında bildirilen parametre adıyla eşleşmesi sağlanarak düzeltilebilir. Dolayısıyla, yukarıdaki örnek için doğru kod şu olacaktır:

VBA ByRef Argüman Türü Uyuşmazlığı - Hata Nedeni 1 - Kod

Kod:

Sub MultiplyNumberByThree(ByRef x As Integer)
x = x * 3
Debug.Print x
End Sub
Sub PrintProduct()
Dim no As Integer
no = 10
MultiplyNumberByThree no
End Sub

Burada, 'num' altprogramda tanımlandığı gibi 'no' olarak değiştirildi ve hata ortadan kaldırıldı. Şimdi çıktı, Immediate sekmesinde şu şekilde yazdırılacak:

VBA ByRef Argüman Türü Uyuşmazlığı - Hata Nedeni 1 - Çıktı

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

Bir alt program veya fonksiyonda tanımlanan parametreden farklı bir veri türündeki değişken geçirirseniz VBA'da “ByRef argüman türü uyuşmazlığı” hatasıyla karşılaşırsınız.

Örneğin, aşağıdaki kodu ele alalım:

VBA ByRef Argüman Türü Uyuşmazlığı - Hata Nedeni 2 - Code.jpg

Bu kodda, MultiplyNumberByThree() alt yordamı bir tamsayı argümanı bekler. Yine de, PrintProduct() alt yordamında, bir Integer türü argümanı yerine bir String argümanı olan bir 'no' değişkeni elde ederiz.

Sonuç olarak aşağıda gösterildiği gibi bir “ByRef argüman türü uyumsuzluğu” ile karşılaşacağız:

VBA ByRef Argüman Türü Uyuşmazlığı - Hata

Bu hatayı düzeltmek için, alt yordama veya fonksiyona geçirilen değişkenin veri türünün, alt yordam veya fonksiyon başlığında bildirilen parametrenin veri türüyle eşleştiğinden emin olmalısınız. Dolayısıyla, yukarıdaki örnekte doğru kod şöyle olacaktır:

VBA ByRef Argüman Türü Uyuşmazlığı - Hata Nedeni 1 - Kod

Burada, PrintProduct()'daki değişkenin veri türü, MultiplyNumberByThree() alt rutini için gereken değişken veri türü argümanıyla eşleşen Integer olarak değiştirilir ve bu da hatanın oluşmasını önler. Çıktıyı Immediate sekmesinde yazdırır.

VBA ByRef Argüman Türü Uyuşmazlığı - Hata Nedeni 1 - Çıktı

Kod:

Sub MultiplyNumberByThree(ByRef x As Integer)
x = x * 3
Debug.Print x
End Sub
Sub PrintProduct()
Dim no As Integer
no = 10
MultiplyNumberByThree no
End Sub

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

Bir değişkenin VBA'daki bir makroda bildirildiğini ancak başka bir makroda bildirilmediğini veya farklı bir veri türüne sahip olduğunu varsayalım. Daha sonra, değişkeni iki makro arasında geçirirken, "ByRef argüman türü uyumsuzluğu" hatasıyla karşılaşabilirsiniz.

Örneğin, aşağıdaki kodu ele alalım:

Hata Nedeni 3 - Code.jpg

Yukarıdaki koddaki MultiplyNumberByThree() alt yordamı argüman olarak bir tam sayı bekler. Ancak, ExampleFunction() alt yordamında herhangi bir bildirim sağlamadık, sadece değişkene bir değer atadık. Bu nedenle, ByRef hatasını tetikleyecektir.

VBA ByRef Argüman Türü Uyuşmazlığı - Hata

Bu hatayı düzeltmek için, değişkenin her iki makroda da aynı veri türüyle bildirildiğinden emin olmalısınız. Değişken bildirimini zorunlu hale getirmek için en üste " Option Explicit " kelimesini ekleyin.

VBA ByRef Argüman Türü Uyuşmazlığı - Hata Nedeni 3 - düzeltilmiş kod

Bu kodda, her iki değişken de her iki makroda aynı veri türüyle tanımlandığından, “ByRef argüman türü uyuşmazlığı” hatası oluşmayacaktır.

Çıktıyı yazdıracak olan:

VBA ByRef Argüman Türü Uyuşmazlığı - Hata Nedeni 3 - çıktı

Kod:

Sub ExampleFunction()
Dim x As Integer
x = 20
MultiplyNumberByThree x
MsgBox x
End Sub
Sub MultiplyNumberByThree(ByRef x As Integer)
x = x * 3
Debug.Print x
End Sub

Excel VBA'da ByRef Argüman Türü Uyuşmazlığı Nasıl Düzeltilir?

Excel VBA'da "ByRef argüman türü uyuşmazlığı" hatasını düzeltmek için, öncelikle bir alt yordama veya fonksiyona geçirdiğiniz argümanın veri türlerinin, alt yordam veya fonksiyon başlığında bildirilen parametrenin veri türüyle eşleşip eşleşmediğini kontrol etmelisiniz.

Bunu önlemek için alınabilecek önlemler aşağıda belirtilmiştir:

  • Argümanın ve parametrenin veri türlerinin eşleştiğini kontrol edin.
    Örneğin, parametre bir Integer olarak bildirilmişse, argüman olarak bir Integer geçirdiğinizden emin olun.
  • Alt rutinde veya fonksiyon çağrısında kullanılan değişken adının, alt rutinde veya fonksiyon başlığında bildirilen parametre adıyla eşleştiğini kontrol edin.
  • Değişkenlerin kullanıldığı her makroda değişkenleri uygun veri türüyle bildirin. Değişkenlerin makrolar arasında doğru şekilde iletilmesini sağlamaya yardımcı olur.
  • Tüm değişkenlerin kullanımdan önce tanımlandığından emin olmak için Option Explicit'i kullanın .
  • Değişken çıktı için kullanılmıyorsa ByRef yerine değişkenin değerini geçirin.

Değişken çıktı için kullanılacaksa, ByRef'i geçirmeden önce değişkenin doğru şekilde tanımlandığından ve başlatıldığından emin olun.

Aşağıdaki adımları izleyerek Excel VBA kodunuzda oluşan “ByRef argüman türü uyuşmazlığı” hatasını tespit edip düzeltebilirsiniz .

Dikkat Edilmesi Gereken Önemli Noktalar

  • Veri türleri: Alt yordama veya fonksiyona geçirilen argümanın veri türünün, alt yordam veya fonksiyon başlığında bildirilen parametrenin veri türüyle eşleştiğinden emin olun.
  • Değişken adları: Alt rutinde veya fonksiyon çağrısında kullanılan değişken adının, alt rutinde veya fonksiyon başlığında belirtilen parametre adıyla eşleştiğinden emin olun.
  • Değişken bildirimi: Değişkenlerin kullanıldığı her makroda değişkenleri uygun veri türüyle bildirin.
    ByRef ve ByVal:  ByRef ve ByVal değişkenlerini geçirme arasındaki farkı anlayın. ByRef, değişkenin bellek adresinin alt yordama veya fonksiyona geçirildiği anlamına gelirken, ByVal değişkenin değerinin geçirildiği anlamına gelir.
  • Değişken başlatma: ByRef'e geçirilmeden önce değişkenin doğru şekilde tanımlandığından ve başlatıldığından emin olun.
  • Hata yönetimi: Kodunuzdaki hataları yakalamak ve işlemek için “Hata Durumunda Devam Et” veya “Hata Durumunda Git” gibi hata yönetimi tekniklerini kullanın.

Bölünmüş işlev VBA'da tür uyuşmazlığı hatası nedir?

VBA'da Split fonksiyonunu kullanırken, bölmeye çalıştığınız değişkenin veri türü Split fonksiyonunun beklediği veri türüyle uyumsuzsa “Tür uyuşmazlığı” hatası oluşabilir.

2. VBA'da 3464 veri türü uyuşmazlığı hatası nedir?

Hata 3464 “Veri Türü Uyuşmazlığı”, VBA'da uyumsuz veri türlerinin iki değerini atarken veya karşılaştırırken oluşan standart bir hatadır. Bu hata, VBA kodunda çeşitli durumlarda ortaya çıkabilir, ancak genellikle veritabanlarında veya elektronik tablolarda depolanan verilerle çalışırken ortaya çıkar.

3. VBA'da hata derleme hatası türü uyuşmazlığı nedir?

"Derleme Hatası: Tür Uyuşmazlığı", koddaki iki değerin veri türleri arasında bir uyumsuzluk olduğunda oluşan bir VBA hatasıdır. Bu hata, çalışma zamanında değil derleme zamanında oluşur, yani hata, VBA kodu yürütülürken değil derlenirken algılanır.

Yorum Gönder

DT KARİYER KPSS Dünyasına Hoş Geldiniz
Sevgili dostum nasıl yardımcı olabilirim?
Bu alana yazınız...