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.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
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
 
Katılım
24 Haziran 2011
Mesajlar
599
Excel Vers. ve Dili
EXCEL 2010 & ACCESS 2007 ENGLISH
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.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,389
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
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
 
Üst