在打开工作簿以备将来使用后,将最后一行的编号保存为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,您必须使用模块名称对其进行限定。

笔记:

  1. 你应该在VBE中启用Option Explicit。 它会告诉你,last_row没有被声明。 有一个好习惯
  2. 虽然这个解决scheme可行,但我100%同意@Siddharth Rout这个方法在概念上是个坏主意 – 你最终会得到一个不稳定的(不可预测的)代码。

有很多更好的方法来解决你的问题; 最简单的是 – 将最后一行的编号保存到隐藏工作表上的单元格中。

你想做什么是一个坏主意,绝对不build议。 公共variables重置出现错误的时刻。

每次你想使用它重新计算它。 你可以用两种方法做到这一点

  1. lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row其中ws是您的工作表对象
  2. 创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