固定值一直在加起来

我有下面的代码,让我的工作表(“testing”)填充数据。 r是表示在该工作表中将添加多less组/行的数据的数字。 但是,当我打电话给该模块时,从第二次提到“r”。 它自己加起来。 我怎样才能从同一行/列input数据在工作表上的同一行?

Sub addVal(Ctrl As String, Col As Single, tRow As Single) Dim ii As Single ii = Me.packageNum.Value - 1 'my control name start from 0 to 9(max) For i = 0 To ii Worksheets("test").Cells(tRow, Col).Value = Application.WorksheetFunction.Trim(StrConv(Me.controls(Ctrl & i).Text, vbProperCase)) tRow = tRow+ 1 Next End Sub Private Sub Confirm_Click() Dim r As Single Call addVal("lot", 4, fEmpty("test")) 'the fEmpty is another module to get the first empty row. working fine r = 2 ' that was a variable number that get from another userform. now I just change to 2 for testing Call addVal("estate", 8, r) 'r = 2 Call addVal("stage", 9, r) 'r = 4 (+2) Call addVal("address", 5, r) 'r = 6 (+2 again) Call addVal("suburb", 6, r) ' and so on ....... ' calling more same module End Sub 

addVal ,增加第三个参数tRow 。 既然你传递r作为参数,它会增加。 如果你只想传递r ,而不是variables本身,则使用ByVal

 Sub addVal(Ctrl As String, Col As Single, ByVal tRow As Single) 

否则, tRow函数中的tRowaddVal引用与r相同的内存位置,并且更改其中一个将更改另一个。

如果你想确保对variables的引用被传递,而不仅仅是值,使用ByRef 。 这里是一个例子:

 Sub test() Dim x As Long, y As Long, z As Long x = 1 y = 1 z = 1 MsgBox "x = " & x & "; y = " & y & "; z = " & z Call incrementValues(x, y, z) MsgBox "x = " & x & "; y = " & y & "; z = " & z End Sub Sub incrementValues(ByRef a As Long, ByVal b As Long, c As Long) a = a + 1 b = b + 1 c = c + 1 MsgBox "a = " & a & "; b = " & b & "; c = " & c End Sub 

最后一个参数是查看默认行为。

如果你的谷歌ByVal和ByRef你会发现更多的。