將變量做為參數傳遞給方法
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