函数不能返回Long

当这两种方式中的任何一种时:

MsgBox find_row(ws_month, bs, cat, subcat, item) or dim row as long row = find_row(ws_month, bs, cat, subcat, item) MsgBox row 

输出这个代码

 Function find_row(ws As Worksheet, bs As String, _ cat As String, subcat As String, item As String) As Long Dim vArr As Variant Dim iCount As Long Dim lr As Long Dim tmp As Long lr = get_last_row(ws) vArr = Range("a1:d" & lr).Value For iCount = LBound(vArr) To UBound(vArr) If vArr(iCount, 1) = bs Then If vArr(iCount, 2) = cat Then If vArr(iCount, 3) = subcat Then If vArr(iCount, 4) = item Then 'MsgBox iCount tmp = iCount End If End If End If End If Next iCount fing_row = tmp End Function 

它返回0

我输出所有的var进入函数来certificate有效的数据进入,但仍然是0

我也可以通过使用消息框从函数内打印iCount和tmp,但可以将值返回到我的主代码?

有任何想法吗?

在这段代码中,我唯一通常使用的代码是添加了LBound和Ubound,但是我已经检查了很多例子,并且我确定我有这个部分是正确的

您将variablesfing_row分配给tmp

你不应该分配find_row = tmp吗?

编辑:避免使用variables打印错误的一个好方法是始终在代码的顶部使用Option Explicit 。 如果你已经使用过了,那么就不会允许你的代码编译(因为fing_row不会被声明)。