我在" Main"中有以下代码片。
MsgBox "Code fired"
Sheets("Main").Range("H" & 2) =Sheets("RSP").Cells.SpecialCells(xlLastCell).Row
我的目的是从RSP表中获取最大使用过的单元格并将其放在主页中。这段代码很好,它给了我正确的计数。 但是,代码仅在我保存工作簿时才有效。
例: 我的主页目前显示RSP上的Count为50,我转到RSP表并在最后添加一个新行。当我回到Main页面时,计数增加到51.现在,如果我转到RSP并删除raw,然后返回主页,则计数不会减少。它仍然显示51.如果我保存工作簿,切换到其他工作表并返回主工作表,计数会更改。
我尝试在两个地方放置相同的代码,即主页面的Worksheet_activate和RSP页面的WorkSheet_Deactivate。但没有区别。并且,在所有情况下,消息框都在工作。
答案 0 :(得分:0)
您要查找指定列的最后一行还是最后一行? 以下是两种选择。
Sub FindAnyLstRow()
Dim ws As Worksheet, MyRng As Range
Dim sh As Worksheet
Dim Rws As Long, r As Range, fRng As Range
Set ws = Worksheets("Main")
Set MyRng = ws.Range("H2")
Set sh = Worksheets("RSP")
With sh
Set r = .Range("A1")
Rws = .Cells.Find(what:="*", after:=r, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
MyRng = Rws
End Sub
And
Sub GetLastCellInColumnA()
Dim ws As Worksheet, MyRng As Range
Dim sh As Worksheet
Dim Rws As Long, fRng As Range
Set ws = Worksheets("Main")
Set MyRng = ws.Range("H2")
Set sh = Worksheets("RSP")
With sh
Rws = .Cells(Rows.Count, "A").End(xlUp).Row
Set fRng = .Cells(Rws, 1)
End With
MyRng = fRng
End Sub
答案 1 :(得分:0)
这可能适合你。
Sheets("Main").Range("H2") = Sheets("RSP").Cells.Find("*", Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row
现在,解释。如果您想了解它,请完整阅读。
在尝试查找工作表中的最后一个单元格(或行,列)时,您首先要确定这是什么意思。
已使用=非空白,即数据。
已使用=" ...正在使用中,表示包含数据或格式的部分。" This is the criterion used by Excel at the time of saving。另见this。 该标准通常产生意外的结果,但也可以有意地利用(不太经常,肯定地),例如突出或打印特定区域,这些区域最终可能没有数据。当然,作为保存工作簿时使用范围的标准是可取的。
通常,这两个标准为最后一个单元格提供相同的结果,这似乎是您的情况。 这已涵盖here和here。
对于标准1,找到最后使用过的单元格的众多方法中有三种是: