Bu, VBA röportajlarında en çok sorulan sorulardan biridir. Bu yazıda excel VBA'da ByVal ve ByRef argümanları arasındaki farkın ne olduğunu öğreneceğiz.
Tanımlar:
ByRef argümanı: Referansın gerçek kısa biçimidir. Bir argüman, ByRef argümanı olarak farklı bir alt veya fonksiyona iletildiğinde, gerçek değişkenin referansı gönderilir. Değişkenin kopyasında yapılan herhangi bir değişiklik orijinal argümana yansır.
Bir fonksiyona ByRef kullanılarak değer yerine değerin lokasyonunun fonksiyona gönderildiğini söyleyebiliriz.
Bu, VBA'daki varsayılan argümandır. Argümandan önce ByRef yazmamıza gerek yok.
Sözdizimi:
Sub x(a Varyant olarak)
'Veya
Sub x(ByRef a Varyant olarak)
ByVal argümanı: Değere göre kelimenin tam anlamıyla kısa bir şeklidir. Bir argüman farklı bir alt veya fonksiyona ByVal argümanı olarak iletildiğinde, sadece argümanın değeri gönderilir. Orijinal argüman olduğu gibi bırakılır. Yabancı işlevde veya altta yapılan herhangi bir değişiklik orijinal argümana yansımayacaktır.
Bir argümanı ByVal olarak bildirmek için argümandan önce ByVal anahtar sözcüğünü kullanmanız gerekir.
Sözdizimi:
Sub x(ByVal a Varyant olarak)
Artık tanımları biliyoruz. Bir örnek görelim ve üzerinden geçelim.
ByRef Örneği
İşte basit bir program.
Sub X(ByRef Bir Varyant Olarak) a = 20 Debug.Print "in alt X değerinde a = " & a End Sub Sub Y() a = 10 X(a) Debug.Print "'i a = " & a'nın alt Y değerinde çağırın Alt Bitiş
Yani burada iki alt programımız var. İlk alt, değişken bir argümanı şu şekilde alan X'tir. ByRef.
(ByRef anahtar sözcüğünü atlayabilirsiniz. Varsayılandır.)
Ardından, değerini ayarlıyor bir = 20 end sonra a değerini yazdırır.
Alt Y alt yordamı çağıran ana alt yordamdır x. değerini ayarlar bir=10 sonra X altyordamını çağırır ve geçera bir argüman olarak. Sonra değerini yazdırır a Y'de
Şimdi Sub Y'yi çalıştırdığınızda elde ettiğiniz çıktı budur.
a = 20'nin alt X değerinde
a = 20'nin alt Y değerinde
Sonuç: Orijinal a'nın değeri alt X tarafından değiştirilir ve her iki alt için 20'ye ayarlanır.
Alt Y çalıştığında, a'nın başlangıç değerinin 10 olduğunu görebilirsiniz. Y, X(a)'yı çağırır. X, a=20 değerini ayarlar. “a = 20'nin alt X değerinde” yazdırır. Kontrol, y'ye geri döner ve a = 20'nin alt Y değerinde yazdırır.
Bu, ByRef argümanının etkisidir.
ByVal Örneği:
Bu bir ByVal Örneğidir
Sub X(ByVal a As Variant) a = 20 Debug.Print "in alt X değerinde a = " & a End Sub Sub Y() a = 10 X(a) Debug.Print "'i a = " & a'nın alt Y değerinde çağırın Alt Bitiş
Her iki örnek de argüman geçişinin tek farkıyla aynıdır. Burada X'te argümanlar ByVal olarak bildirilir. Bu sefer Y alt yordamını çalıştırdığınızda çıktı:
a = 20'nin alt X değerinde
a = 10'un alt Y değerinde
Sonuç: Orijinal a'nın değeri alt X tarafından DEĞİŞTİRİLMEZ. X için 20 ve Y için 10'dur.
Y, X'i a ile çağırdığında, a'nın adresini değil, yalnızca a'nın değerini gönderir. Dolayısıyla a'da yapılan herhangi bir değişiklik orijinal değişkene yansıtılmaz.
Test için, eğer baskı değeri a X'te 20'ye ayarlamadan önce 10 yazdıracaktır. Çünkü 10, byVal kullanılarak bir in X'e geçirilir. Gönderdiğiniz ByRef'i kullanarak bir Y ile bir X.
Bu kolay bir soru, ancak çoğumuz bunu vba röportaj sorusunda karıştırıyoruz. Sebebi ise çok fazla kullanmamamız. Çoğu zaman değeri farklı bir değişkene kopyalarız..
Evet arkadaşlar, excel VBA'daki ByRef ve ByVal argümanlarının farkı budur. Bu konuyla veya başka bir VBA veya Excel konusuyla ilgili herhangi bir şüpheniz varsa bana bildirin. Yorum bölümü tamamen size ait.
Microsoft Excel 2016'da VBA Kullanarak Yeni Çalışma Kitabı Ekleme ve Kaydetme
Excel VBA Durum Çubuğunda Bir Mesaj Görüntüle
Microsoft Excel 2016'da VBA Kullanarak Uyarı Mesajlarını Kapatın
Popüler Makaleler:
Excel'de DÜŞEYARA İşlevi
Excel 2016'da EĞERSAY
Excel'de SUMIF İşlevi Nasıl Kullanılır