You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DataBodyRange获取行号时结果与实际行号不符的问题求助

问题原因与解决方法

问题根源

你得到的41是表格数据区域内的相对行号,而非Excel工作表的绝对行号。Application.Match在表格的DataBodyRange中查找时,返回的是目标值在数据区域里的位置(从1开始计数),不是它在整个工作表中的行号。

比如你的表格表头在第1行,数据从第2行开始,那相对行号1就对应工作表的第2行,以此类推。你的目标值在工作表第42行,说明表格数据区域从第2行开始,42-2+1=41,正好是Match返回的结果。

修正代码

要获取工作表的绝对行号,需把Match返回的相对行号,加上表格数据区域的起始行号,再减1:

Function FindRFIDCode(ByVal partNum As String) As Integer

    FindRFIDCode = 0
    Dim matchResult As Variant
    Dim tbl As ListObject
    Set tbl = Range("CombinedTapeInfo").ListObject
    
    ' 先判断表格是否有数据,避免空表格触发错误
    If tbl.DataBodyRange Is Nothing Then
        Exit Function
    End If
    
    matchResult = Application.Match(partNum, tbl.ListColumns(1).DataBodyRange, 0)
    
    If IsError(matchResult) Then
        FindRFIDCode = 0
    Else
        ' 计算绝对行号:数据区域起始行 + 相对行号 - 1
        FindRFIDCode = tbl.DataBodyRange.Row + matchResult - 1
    End If
    
End Function

额外说明

  • 新增空表格判断逻辑,防止表格无数据时抛出错误。
  • 如果你的需求本来就是获取表格内的相对行号,原代码是正确的;若需工作表绝对行号,使用修正后的逻辑即可。

内容的提问来源于stack exchange,提问作者TheIntern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 03:05:17