我有个问题:
Public Sub ChangeRow(Column As String, Value As String, id As Integer)
For i = 4 To 15
For Each rw In Worksheets(i).Rows
If Worksheets(i).Range("A" & rw.row).Value = id Then
Dim row As Integer
**row = getRow(id, i)**
MsgBox (row)
If Worksheets(i).Range(Column & rw.row).Value <> Value Then
Worksheets(i).Range(Column & rw.row) = Value
End If
Exit For
End If
Next rw
Next i
End Sub
Function getRow(id As Integer, Sheet As Integer) As Integer
For Each rw In Worksheets(Sheet).Rows
If Worksheets(Sheet).Range("A" & rw.row).Value = id Then
getRow = rw.row
End If
Next rw
End Function
更改行工作正常......它只是当我将'row = getRow(id,i)'添加到组合中时它会引发ByRef不匹配错误?
最佳答案
这是一个很好的例子,说明为什么使用 Option Explicit
是一个很好的做法。
添加 Option Explicit
到您的工作表模块的最顶部,在您的宏之外。
这会强制你声明你的 subs 中使用的所有变量,并且还可以帮助捕获变量名中的拼写错误。
这将捕捉到 i
未声明。因此,默认情况下 VBA/Excel 将设置 i
成为 Variant
.
然后,当您点击 row = getRow(id, i)
,你基本上是通过 row = getRow([integer], [Variant])
.但是那个子期待getRow([integer],[integer])
...因此您的 Type Mismatch
错误。
因此,如前所述,只需执行 Dim i as Integer
在 ChangeRow
的顶部子。
(或者,对于长期 VBA 使用 Long
而不是 Integer
)。
关于vba - 返回值时编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49802693/