vba - 返回值时编译错误

标签 vba excel compiler-errors

我有个问题:

    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 IntegerChangeRow 的顶部子。

(或者,对于长期 VBA 使用 Long 而不是 Integer )。

关于vba - 返回值时编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49802693/

相关文章:

sql - 使用 VBA 在 SQL 中插入德语日期格式

vba - 向用户部署 Word 宏的最简单方法?

java - 即使单元格具有值,cellIterator.hasNext() 也会返回 false

c++ - 错误: class name does not name a type in C++

sql-server - 如何从 Excel 将记录插入 SQL Server

SUMIFS 的 VBA 代码?

excel - 基于第二列值的动态命名范围,没有 VBA

scala - 使用H2数据库时在Quill中执行插入或更新操作时发生编译错误

具有预定大小的 C++ vector 抛出编译错误

vba - Word 2007如何直接跳转到当前表格单元格的最后一行?