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
修改说明
- 把原来存储工作表名的字符串变量替换为
Worksheet对象变量,用Set关键字赋值为对应编号的工作表,才能合法调用Cells、Rows等工作表专属属性 - 函数返回值类型从
String改为Long,匹配行号的数值属性,避免后续出现类型不匹配错误 - 移除了变量和属性之间的多余空格,统一变量引用规范
Rows.Count前绑定了目标工作表对象,确保统计的是目标工作表的最大行数,跨表调用时不会出错
内容的提问来源于stack exchange,提问作者Some One
相关产品推荐
相关产品推荐

