將變量作爲參數傳遞給方法數組
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關鍵字強制形參爲值傳遞spa
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
調用一個有返回值函數code
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
認識「()」blog
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
解釋:io
一、Add只有一個參數,而且是「過程式調用」方式的時候,VBE「偷偷」把代碼自動改成了Add (a)。注意,Add和(a)之間有個「空格」編譯
2、()在此有徹底不一樣的意義,能夠理解它是一個運算符。(a)生成了一個臨時變量,a的一個副本,而後將這個臨時變量(a)傳遞給Addclass
三、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