在打开工作簿以备将来使用后,将最后一行的编号保存为variables
我想保存在Workbook_Open()
中的特定Workbook_Open()
表中使用的最后一个行号,以便以后在其他模块中使用。 到目前为止,我有这样的代码:
的ThisWorkbook:
Public last_row as long Private Sub Workbook_Open() last_row = Worksheets("Sheet1").Cells(Rows.count, 1).End(xlUp).Row MsgBox ("This is the last row number: " & last_row) End Sub
当我打开工作簿时,我得到正确的popup消息,如“这是最后一行数:25”。 这是一个理想的输出。
模块1:
Sub ABC() MsgBox ("This is the last row number: " & last_row) End Sub
但是当我运行模块1时,“这是最后一行数字:”消息就是我所得到的。
所以,我没有把“ last_row ”variables存储为public。 我究竟做错了什么? 提前致谢!
要专门回答您的问题,请修改您的代码,如下所示:
Sub ABC() MsgBox ("This is the last row number: " & ThisWorkbook.last_row) End Sub
要使用在ThisWorkbook模块中声明的公共variables,您必须使用模块名称对其进行限定。
笔记:
- 你应该在VBE中启用Option Explicit。 它会告诉你,last_row没有被声明。 有一个好习惯
- 虽然这个解决scheme可行,但我100%同意@Siddharth Rout这个方法在概念上是个坏主意 – 你最终会得到一个不稳定的(不可预测的)代码。
有很多更好的方法来解决你的问题; 最简单的是 – 将最后一行的编号保存到隐藏工作表上的单元格中。
你想做什么是一个坏主意,绝对不build议。 公共variables重置出现错误的时刻。
每次你想使用它重新计算它。 你可以用两种方法做到这一点
-
lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
其中ws
是您的工作表对象 - 创build一个函数,如果你不想每次都写“ long code [双打:)”]
将其粘贴到模块中
Function GetMeLastRow() As Long Dim ws As Worksheet Set ws = Sheet1 '<~~ Change this to relevant sheet or pass it as a parameter With ws GetMeLastRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1 End With End Function
然后像这样使用它
MsgBox GetMeLastRow