我试图根据运行宏的工作表动态更改'lastrow' . 目前我正在使用两张纸 . Sheet1有大约150行数据,Sheet 2只有2行 . 我预计当我选择Sheet2并设置lastrow它将从Sheet2获取行数,而不是它存储来自sheet1的行数 . 我有什么想法可以调整这个吗?
现行代码:
sub row_count()
dim lastrow as long
lastrow = Range("A" & Rows.Count).End(xlUp).row
if lastrow = 150 then
with sheets("sheet2")
.select
lastrow = Range("A" & Rows.Count).End(xlUp).row
msgbox lastrow '<----- Always returns the value of sheet1 instead of sheet2.
end with
end sub
2 回答
你正在使用With block,这意味着程序会在'With'和_2727849之间看到任何内容,因为你在关键字'With'之后放置了任何内容,所以要仅为sheet2修改你的代码:
如果您希望代码在当前可见的工作表上运行,则应将其更改为使用ActiveSheet属性:
但是,有一些方法可以改进此代码:为了灵活性,您可以将工作表作为parameter传递 . 此外,如果最后一次使用的行中已存在数据,则End函数可能会返回第一个使用的行(它与单击最后一行并按Ctrl和向上箭头相同,因此您应该从下面的单元格开始) . 最后,您无需选择工作表即可获得最后一行:
我认为这些例子最容易遵循 .
https://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using-vba
保持开放的心态,有很多方法可以做同样的事情 .