• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

byVAL byREF arasındaki fark ve kullanım amacı

Katılım
24 Haziran 2011
Mesajlar
599
Excel Vers. ve Dili
EXCEL 2010 & ACCESS 2007 ENGLISH
Selamlar,

Benim sorum byVAL ve byREF arasındaki fark ile ilgili.
VBA’nın HELP dosyasında okudum, internette makaleler de buldum ancak biraz fazla karışık geldi bana.

Default olarak VBA’da byREF kullanılıyor. Hangi durumlarda byVAL kullanıldığı hakkındaki benim gibi acemi seviyede VBA kodları yazan birinin anlaycağı şekilde basit bir örnek vermeniz mümkün mü? Bir prosedürün adını yazdıktan sonra parantez içinde byVAL yazmak neye etki ediyor ? Hangi durumlarda, sabitin değerini değiştirme ihtiyacı duyuyoruz ?

Ayrıca sitede birçok kod var byVAL ile yazılmış ancak arama yapınca açıklayıcı bir başlık bulamadım. Küçük bir örnekler bu iki durum arasındaki farkı açıklayabilir misiniz?

Yardımcı arkadaşlara çok teşekkür ederim.
 
ByVal = ByValue,
ByRef = ByReference

Byval ile bir fonksiyonda değerin ta kendisidir. Byref ise bellekteki adresi yani değişken adıdır.

ByVal "C" notasyonu gibi kullanılıyor genelde...

Örnekte iki fonksiyon aynı gibi görünüyor ise de, sonuçların farklı geldiğini göreceksiniz.

Kod:
Function Topla1(ByVal Sayi1 As Integer, _
                ByVal Sayi2 As Integer, _
                ByVal Sonuc As Integer) As Boolean
                
    Sonuc = Sayi1 + Sayi2
End Function

Function Topla2(ByVal Sayi1 As Integer, _
                ByVal Sayi2 As Integer, _
                ByRef Sonuc As Integer) As Boolean
                
    Sonuc = Sayi1 + Sayi2
End Function

Sub test()
    Dim vSonuc As Integer
    
    Topla1 5, 3, vSonuc
    MsgBox vSonuc
    
    Topla2 5, 3, vSonuc
    MsgBox vSonuc
End Sub
 
Sayın Zeki ve Hamit Bey;

Gerçekten çok teşekkür ederim. Profosyonelce kod yazanlar için kolay gelsede benim gibi acemi seviyede olanlar için yanıtlarınız çok faydalı.

Elinize sağlık.
 
Başka bir örnek. (Alıntı)
Prosedur içinde "kelime" değişkenini tekrar kullanmak istediğinizde değişip değişmediğine dikkat edin.

Kod:
Sub test2()
Dim kelime As String
    kelime = "Portakal"
    
    Call fonksiyonVAL(kelime)
    MsgBox ("ByVal Fonksiyonunu çağırdıktan sonra kelime değişkenimiz : " & kelime)
    
    Call fonksiyonREF(kelime)
    MsgBox ("ByREF Fonksiyonunu çağırdıktan sonra kelime değişkenimiz : " & kelime)
End Sub

Function fonksiyonVAL(ByVal deger As String)
    deger = "Elma"
    fonksiyonVAL = True
End Function

Function fonksiyonREF(ByRef deger As String)
    deger = "Elma"
    fonksiyonREF = True
End Function
 
Geri
Üst