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

VBA函数中如何按名称引用工作表获取最后一行?

问题原因及解决方法

报错核心原因

  • 你将存储工作表名称的字符串类型变量直接当做工作表对象调用Cells属性,字符串类型没有Cells成员,是触发invalid qualifier报错的直接原因
  • 此外代码还存在多个隐藏问题:
    • 函数返回值类型定义错误,行号为整数,不应定义为String
    • 变量名拼写大小写不统一,且变量和属性之间多了不必要的空格
    • Rows.Count未绑定指定工作表,默认取当前活动工作表行数,跨表调用时会出现计算错误

修正后代码

Sub test()
    MsgBox LROW(1, 1)
End Sub
    
Function LROW(shtNumber As Integer, Col As Integer) As Long
    ' 声明工作表对象而非字符串变量
    Dim targetSht As Worksheet
    Set targetSht = ThisWorkbook.Worksheets("Sheet" & shtNumber)
    ' 所有属性绑定目标工作表对象,避免取值偏差
    LROW = targetSht.Cells(targetSht.Rows.Count, Col).End(xlUp).Row
End Function

修改说明

  1. 把原来存储工作表名的字符串变量替换为Worksheet对象变量,用Set关键字赋值为对应编号的工作表,才能合法调用Cells、Rows等工作表专属属性
  2. 函数返回值类型从String改为Long,匹配行号的数值属性,避免后续出现类型不匹配错误
  3. 移除了变量和属性之间的多余空格,统一变量引用规范
  4. Rows.Count前绑定了目标工作表对象,确保统计的是目标工作表的最大行数,跨表调用时不会出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:24:06