Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 打开工作簿后,将最后一行号另存为变量,以备以后使用_Vba_Excel - Fatal编程技术网

Vba 打开工作簿后,将最后一行号另存为变量,以备以后使用

Vba 打开工作簿后,将最后一行号另存为变量,以备以后使用,vba,excel,Vba,Excel,我想将特定工作表中使用的最后一行号保存在Workbook\u Open(),以便以后在其他模块中使用。 到目前为止,我有以下代码: 此工作簿: 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

我想将特定工作表中使用的最后一行号保存在
Workbook\u Open()
,以便以后在其他模块中使用。 到目前为止,我有以下代码:

此工作簿:

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”变量存储为public。我做错了什么?提前谢谢

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

每次要使用它时都要重新计算它。你可以用两种方法来做

  • lRow=ws.Range(“A”&ws.Rows.Count).End(xlUp).Row
    其中
    ws
    是您的工作表对象
  • 如果您不想每次编写“长代码”[pun意为:)]”,请创建一个函数
  • 将此粘贴到模块中

    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
    

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

    每次要使用它时都要重新计算它。你可以用两种方法来做

  • lRow=ws.Range(“A”&ws.Rows.Count).End(xlUp).Row
    其中
    ws
    是您的工作表对象
  • 如果您不想每次编写“长代码”[pun意为:)]”,请创建一个函数
  • 将此粘贴到模块中

    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
    

    要具体回答您的问题,请按如下方式修改代码:

    Sub ABC()
       MsgBox ("This is the last row number: " & ThisWorkbook.last_row)
    End Sub
    
    若要使用此工作簿模块中声明的公共变量,必须使用模块名对其进行限定

    注:

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

    要具体回答您的问题,请修改您的代码,如下所示:

    Sub ABC()
       MsgBox ("This is the last row number: " & ThisWorkbook.last_row)
    End Sub
    
    若要使用此工作簿模块中声明的公共变量,必须使用模块名对其进行限定

    注:

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

    您需要带数据的最后一行还是仅需要最后一行?(1)“它不工作”是一个非常糟糕的错误描述。消息框中的实际输出是什么?您希望得到什么?有错误吗?在哪里?(2) 在使用
    单元格
    范围
    等时,始终指定工作表。您在
    行中遗漏了该工作表。计数
    哪些工作表应为
    工作表(“Sheet1”)。行。计数
    。不好主意。为什么要将其存储在
    工作簿\u Open()
    中?为什么不实时重新计算呢?目标是什么?@SiddharthRout我这样做是为了在打开工作簿后从
    最后一行+1
    恢复操作。就像我说的,这是个坏主意。如果出现代码错误,公共变量将重置。我建议每次都重新计算它您是需要最后一行数据还是只需要最后一行?(1)“它不工作”是一个非常糟糕的错误描述。消息框中的实际输出是什么?您希望得到什么?有错误吗?在哪里?(2) 在使用
    单元格
    范围
    等时,始终指定工作表。您在
    行中遗漏了该工作表。计数
    哪些工作表应为
    工作表(“Sheet1”)。行。计数
    。不好主意。为什么要将其存储在
    工作簿\u Open()
    中?为什么不实时重新计算呢?目标是什么?@SiddharthRout我这样做是为了在打开工作簿后从
    最后一行+1
    恢复操作。就像我说的,这是个坏主意。如果出现代码错误,公共变量将重置。我建议每次都重新计算好的,我试试这个。谢谢好的,我试试这个。谢谢谢谢你也在写作。我想我还是会使用简单的解决方案。谢谢!你也在写作。我想我还是会使用简单的解决方案。