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
相关产品推荐
相关产品推荐

