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

VBA中使用.Cells查找最后一行:两行代码差异原因咨询

VBA代码运行差异原因分析

核心差异:Rows.Count的父对象是否明确指定

第一行无法运行的代码:

Set lkp = wb_wrk.Worksheets("Books").Range("B6:B" & wb_wrk.Worksheets("Books").Cells(Rows.Count, 2).End(xlUp).Row)

这里的Rows.Count没有绑定具体的工作表,VBA会默认使用当前活动工作表的总行数。如果当前活动工作表不是wb_wrk.Worksheets("Books"),两者的行数可能不一致(比如活动工作表是旧版Excel的65536行,目标工作表是新版的1048576行),会导致最后一行行号计算错误,进而无法正确生成Range对象,触发运行错误。

第二行可正常执行的代码:

Set lkp = wb_wrk.Worksheets("Books").Range("B6:B" & wb_wrk.Worksheets("Books").Cells(wb_wrk.Worksheets("Books").Rows.Count, 2).End(xlUp).Row)

这行代码里的wb_wrk.Worksheets("Books").Rows.Count明确指定了行数所属的目标工作表,不管当前激活的是哪个工作表,都会基于Books工作表的总行数来计算B列最后一行的行号,因此能正确构建Range对象,代码正常运行。

优化建议

重复调用wb_wrk.Worksheets("Books")会让代码冗余,建议先将工作表对象赋值给变量,提升可读性和维护性:

Dim wsBooks As Worksheet
Set wsBooks = wb_wrk.Worksheets("Books")
Set lkp = wsBooks.Range("B6:B" & wsBooks.Cells(wsBooks.Rows.Count, 2).End(xlUp).Row)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:10:06