打开工作簿以供以后使用后,将最后一行编号保存为变量

时间:2017-06-09 06:02:36

标签: excel vba excel-vba

我想在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

我正确地收到了弹出消息,例如"这是最后一行:25",当我打开工作簿时。这是一个理想的输出。

第1单元:

Sub ABC()
    MsgBox ("This is the last row number: " & last_row)
End Sub

但是当我运行模块1时,"这是最后一个行号:"消息是我得到的。

所以,我没有存储" last_row "变量为公共。我究竟做错了什么?提前谢谢!

2 个答案:

答案 0 :(得分:3)

你想做的是一个坏主意,绝对不推荐。公共变量会在出现错误时重置。

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

  1. lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row其中ws是您的工作表对象
  2. 如果您不想每次都写出“长代码 [双关语:)]”,请创建一个函数
  3. 将其粘贴到模块中

    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 
    

答案 1 :(得分:1)

要专门回答您的问题,请修改以下代码:

Sub ABC()
   MsgBox ("This is the last row number: " & ThisWorkbook.last_row)
End Sub

要使用ThisWorkbook模块中声明的公共变量,必须使用模块名称对其进行限定。

注意:

  1. 您应该在VBE中启用Option Explicit。它会告诉你last_row没有声明。有一个好习惯;
  2. 虽然这个解决方案可行,但我100%同意@Siddharth Rout这种方法在概念上是个坏主意 - 你最终会得到一个不稳定(不可预测)的代码。
  3. 有许多更好的方法可以解决您的问题; simpest是 - 将您的最后一行编号保存到隐藏工作表上的单元格中。