[英]Worksheet_Activate does not run when opening workbook, even if I call sheet.Activate
[英]Worksheet_Activate in excel macro not functioning unless I save the sheet
我的“主”表中有以下代码。
MsgBox "Code fired"
Sheets("Main").Range("H" & 2) =Sheets("RSP").Cells.SpecialCells(xlLastCell).Row
我的目的是从RSP表中获取最大使用的单元格并将其放在Main表中。这段代码很好,它给了我正确的计数。 但是,该代码仅在我保存工作簿时有效。
例如:我的主页当前显示RSP计数为50,我转到RSP表并在末尾添加新行。 回到主页时,计数增加到51。现在,如果我转到RSP并删除原始数据,然后返回主页,则计数没有减少。 它仍然显示51。如果我保存工作簿,切换到其他工作表并返回到主工作表,则计数会更改。
我尝试将相同的代码放在两个地方,即Main页面的Worksheet_activate和RSP页面的WorkSheet_Deactivate。 但是没有区别。 而且,在所有情况下,消息框都可以正常工作。
您要查找指定列的最后一行还是最后一行? 这都是两个选择。
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
这可能对您有用。
Sheets("Main").Range("H2") = Sheets("RSP").Cells.Find("*", Range("A1"), xlFormulas, , xlByRows, xlPrevious).Row
现在,进行解释。 如果您想了解它,请完整阅读。
尝试查找工作表中的最后一个单元格(或行,列)时,首先必须确定这是什么意思。
已使用=非空白,即具有data 。
Used =“ ...正在使用中,表示包含数据或格式的部分。” 这是保存时Excel使用的标准 。 另请参见本 。 此标准通常会产生意外的结果,但也可能有意利用(较少地,肯定地)利用它,例如突出显示或打印可能最终没有数据的特定区域。 并且,当然,作为保存工作簿时要使用的范围的标准是合乎需要的。
通常,这两个条件对于最后一个单元格给出的结果相同,这似乎是您的情况。 这在这里和这里都涵盖了 。
对于条件1,找到最后使用的像元的许多方法中的三种是:
UsedRange
。 SpecialCells(xlLastCell)
。 方法2和3在添加(数据或格式)超过前一个最后一个单元格时始终更新其目标“最后一个单元格”。 但是他们不会更新其目标“最后一个单元格”,直到您从上一个最后一个单元格中删除(数据和格式)时保存工作簿为止。 方法1无需保存工作簿即可工作。
对于crtierion 2,也有很多方法:
(大多数?)即使不保存工作簿,这些方法也将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.