VBA中傳遞參數方式 byval(副本), byref(共有變量)


vba 傳遞參數值時,分為Byval 和Byref
參數分為形參和實參,
形參指的是過程名稱中用括號括起來的參數,
實參指的的是調用過程中,向過程傳遞的數據參數。
可以理解為:形參相當於公式中的自變量,實參相當於使用公式時代入自變量中的具體數值。
 
 
Byref,地址傳遞參數,傳遞的是地址,過程操作的是變量的地址
Byval,值傳遞參數,將變量的內容復制了一遍,過程操作的是另外一個變量,只不過這兩個變量名稱一樣,值一樣
 
Vba中,參數傳遞的默認方式是Byref,因為本質想法是對於相同命名的參數,在系統中采用同一個數值。
Sub ByRefByVal()
    Dim A As Integer, B As Integer
    A = 1
    B = 2
    VarPtr (A)
    VarPtr (B)
    Call AAA(A, B)
    Debug.Print A, B
    Call BBB(A, B)
    Debug.Print A, B
End Sub

 

Sub BBB(ByRef Abbb As Integer, ByRef Bbbb As Integer)
    Abbb = Abbb + 1
    VarPtr (Abbb)
    Bbbb = Bbbb + 1
    VarPtr (Bbbb)
End Sub

 

Sub AAA(ByVal Aaaa As Integer, ByVal Baaa As Integer)
    Aaaa = Aaaa + 1
    VarPtr (Aaaa)
    Baaa = Baaa + 1
    VarPtr (Baaa)
End Sub

 其中,call BBB(A,B)后,A=2,B=3

call AAA(A,B)后,A=1,B=2
 

值傳遞,相當於傳的是一個副本,對於副本的操作不影響正本

地址傳遞,相當於是一個共有變量,傳的是地址,該變量可以在過程中改變。
 
所以,聯合編寫程序時,我不希望自己的函數值受到別人的影響,通常會設定要按值傳遞,

 
值傳遞只是將變量的內容復制一份而已,函數進行操作的其實是另一個變量,只是另一個變量的值和傳遞的變量值是相同的。
而地址傳遞是直接把變量的地址傳遞給函數,這時函數是直接對原來的變量進行操作的。所以值會變化。
舉例說吧:值傳遞就相當於克隆了一個同樣的變量,操作的是克隆出來的那個,原來的變量沒有變化,但是地址傳遞是直接對原來的變量進行操作,沒有克隆新的變量。。。懂了吧,,,

也可以這樣理解:比如要考試了,你有一份復習題,值傳遞就相當於別人借你的試卷去復印,然后在復印的那份上面做筆記,而地址傳遞就是別人直接在你原有的試卷上做筆記,沒有復印,所以等你拿回來你會發現自己的試卷亂七八糟的,,,這下應該懂了哦。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM