首页 文章

VBA动态更改'lastrow'

提问于
浏览
0

我试图根据运行宏的工作表动态更改'lastrow' . 目前我正在使用两张纸 . Sheet1有大约150行数据,Sheet 2只有2行 . 我预计当我选择Sheet2并设置lastrow它将从Sheet2获取行数,而不是它存储来自sheet1的行数 . 我有什么想法可以调整这个吗?

现行代码:

sub row_count()
dim lastrow as long
lastrow = Range("A" & Rows.Count).End(xlUp).row

if lastrow = 150 then
with sheets("sheet2")
.select
lastrow = Range("A" & Rows.Count).End(xlUp).row
msgbox lastrow '<----- Always returns the value of sheet1 instead of sheet2.
end with

end sub

2 回答

  • 1

    你正在使用With block,这意味着程序会在'With'和_2727849之间看到任何内容,因为你在关键字'With'之后放置了任何内容,所以要仅为sheet2修改你的代码:

    Sub row_count()
    
    Dim lastrow As Long
    
    lastrow = Sheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row
    
    If lastrow = 150 Then
        With Sheets("sheet2")
        ' .Select = Sheets("sheet2").Select
        .Select
        ' .Range = Sheets("sheet2").Range
        lastrow = .Range("A" & Rows.Count).End(xlUp).Row
        MsgBox lastrow
    End With
    
    End Sub
    

    如果您希望代码在当前可见的工作表上运行,则应将其更改为使用ActiveSheet属性:

    Sub row_count()
    
    Dim lastrow As Long
    
    lastrow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    
    If lastrow = 150 Then
        With ActiveSheet ' use the currently visible sheet
        .Select
        lastrow = .Range("A" & Rows.Count).End(xlUp).Row
        MsgBox lastrow
    End With
    
    End Sub
    

    但是,有一些方法可以改进此代码:为了灵活性,您可以将工作表作为parameter传递 . 此外,如果最后一次使用的行中已存在数据,则End函数可能会返回第一个使用的行(它与单击最后一行并按Ctrl和向上箭头相同,因此您应该从下面的单元格开始) . 最后,您无需选择工作表即可获得最后一行:

    Sub GetRowCounts()
    
    row_count Sheets("sheet1")
    row_count Sheets("sheet2")
    
    End Sub
    

    Sub row_count(ws As Worksheet)
    
    Dim lastrow As Long
    
    lastrow = ws.Range("A1000000").End(xlUp).Row
    
    MsgBox lastrow
    
    End Sub
    
  • 0

    我认为这些例子最容易遵循 .

    Sub FindingLastRow()
    
    'PURPOSE: Different ways to find the last row number of a range
    'SOURCE: www.TheSpreadsheetGuru.com
    
    Dim sht As Worksheet
    Dim LastRow As Long
    
    Set sht = ThisWorkbook.Worksheets("Sheet1")
    
    'Ctrl + Shift + End
      LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
    
    'Using UsedRange
      sht.UsedRange 'Refresh UsedRange
      LastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row
    
    'Using Table Range
      LastRow = sht.ListObjects("Table1").Range.Rows.Count
    
    'Using Named Range
      LastRow = sht.Range("MyNamedRange").Rows.Count
    
    'Ctrl + Shift + Down (Range should be first cell in data set)
      LastRow = sht.Range("A1").CurrentRegion.Rows.Count
    
    End Sub
    

    https://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using-vba

    保持开放的心态,有很多方法可以做同样的事情 .

相关问题