2015-08-27 144 views
1

在以下两种方式:功能没有返回龙

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

我有输出的所有变种即将进行功能证明有效数据正在进入,但仍然0

我也可以打印iCount和tmp从withi通过使用消息框功能,但可以返回到我的主代码的价值?

任何想法?

我在此代码做不同的唯一的代码我通常使用的是另外LBOUND和UBOUND的,但我已经检查了许多实例,并且我相信我有部分权

+0

同时用'Range(“a1”)替换'Range(“a1:d”&lr).Value'。Resize(lr,4).Value' – ja72

回答

2

您指定变量fing_rowtmp

您不应该指定find_row = tmp吗?

编辑: 一个好办法避免错字与变量,是总是在你的代码的顶部使用Option Explicit。如果你已经使用过它,它不会允许你的代码编译(因为fing_row不会被声明)。

+0

And the typo:P.接得好。 – BruceWayne

+0

哦,亲爱的主!我怎么错过了!非常感谢!另一个为阅读障碍编码者协会! – user3661451

+0

@ user3661451,因为您没有启用Option Explicit。你真的应该这样做(在VBA IDE中去工具=>选项并勾选需要声明框 – sous2817