VBA中方法傳參


將變量做為參數傳遞給方法

 1 Sub Test()
 2 Dim a As Integer
 3     a = 1
 4 Add a
 5 Debug.Print a      '引用傳遞,a的值發生了變化,輸出101
 6 End Sub
 7 
 8 Function Add(a As Integer)
 9    a = a + 100
10 End Function

   結論:VB傳參時默認是引用傳遞byRef。

使用byVal關鍵字強制形參為值傳遞

 1 Sub Test()
 2 Dim a As Integer
 3     a = 1
 4 Add a
 5 Debug.Print a      '值傳遞,a的值沒有變化,輸出1
 6 End Sub
 7 
 8 Function Add(ByVal a As Integer)
 9    a = a + 100
10 End Function

調用一個有返回值函數

 1 Sub Test()
 2 Dim a As Integer
 3     a = 1
 4 Dim sum As Integer
 5     sum = Add(a)
 6 Debug.Print sum      '引用傳遞,輸出101
 7 End Sub
 8 
 9 Function Add(a As Integer) As Integer
10   Add = a + 100
11 End Function

  認識“()”

 1 Sub Test()
 2 Dim a As Integer
 3     a = 1
 4     Add (a)
 5 Debug.Print a                 'a的值沒有變化,輸出1
 6 End Sub
 7 
 8 Function Add(ByRef a As Integer) As Integer
 9   a = a + 100
10 End Function

    解釋:

    1、Add只有一個參數,並且是“過程式調用”方式的時候,VBE“偷偷”把代碼自動改為了Add   (a)。注意,Add和(a)之間有個“空格”

    2、()在此有完全不同的意義,可以理解它是一個運算符。(a)生成了一個臨時變量,a的一個副本,然后將這個臨時變量(a)傳遞給Add

    3、a本身並沒有傳遞給Add方法,所以a的值並不會有任何變化。

將一個數組做為參數傳遞給方法:

 1 Sub Test()
 2 Dim arr(2) As Integer
 3     arr(0) = 1
 4     arr(1) = 2
 5     arr(2) = 3
 6 
 7     showArray arr
 8 Dim i As Integer
 9     For i = 0 To 2
10           Debug.Print arr(i)        '輸出101,102,103
11     Next i
12 End Sub
13 
14 Function showArray(arr() As Integer)
15 Dim i As Integer
16     For i = 0 To 2
17        arr(i) = arr(i) + 100
18     Next i
19 End Function

和()有關的一個常見錯誤和保留問題:

 1 Sub Test()
 2 Dim arr(2) As Integer
 3     arr(0) = 1
 4     arr(1) = 2
 5     arr(2) = 3
 6 
 7     showArray (arr)                 '編譯時報錯:缺少數組或用戶定義類型
 8 Dim i As Integer
 9     For i = 0 To 2
10           Debug.Print arr(i)
11     Next i
12 End Sub
13 
14 Function showArray(arr() As Integer)
15 Dim i As Integer
16     For i = 0 To 2
17        arr(i) = arr(i) + 100
18     Next i
19 End Function

      編譯報錯:缺少數組或用戶定義類型,除了()生成了一個臨時變量之外,與此有關的原因暫不明。。       

如果形參是arr而不是arr()

 1 Sub Test()
 2 Dim arr(2) As Integer
 3     arr(0) = 1
 4     arr(1) = 2
 5     arr(2) = 3
 6 
 7     showArray (arr)
 8 Dim i As Integer
 9     For i = 0 To 2
10           Debug.Print arr(i)           '輸出1,2,3
11     Next i
12 End Sub
13 
14 Function showArray(arr)
15 Dim sum As Integer, i As Integer
16     For i = 0 To 2
17        arr(i) = arr(i) + 100
18     Next i
19 End Function

            

          

 


免責聲明!

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



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