首页 > 解决方案 > VBA,用 LastRow 定义范围

问题描述

我在用最后一行变量定义变量时遇到问题。得到错误:

应用程序定义或对象定义的错误

LastRow = WorksheetFunction.Max(Sheets("stack").Cells(Rows.Count, "M").End(xlUp).Row + 1)
busdates = Sheets("stack").Range("M3" & ":" & "M & LastRow - 1")

我知道这与我的范围有关。有人可以帮忙看看这个格式吗?试图获得 M3 到 M 最后一行的范围。

然后我试图busdates像这样循环,

For d = 2 To busdates
    If ActiveSheet.Range("F") <> busdates Then
        ActiveSheet.Range("F2:K").Copy
        ActiveSheet.Range("M" & LastRow).PasteSpecial Paste:=xlPasteValues
    End If
Next

标签: vbaexcel

解决方案


这里要复制的范围ActiveSheet.Range("F2:K").Copy没有完全定义。该K列缺少一行。


Gessingbusdates是一个范围,那么它应该这样分配:

Dim busDates As Range
Set busDates = Sheets("stack").Range("M3:M" & lastRow - 1)

d如果在循环中未使用变量,则循环遍历范围的行有点毫无意义,但仍然:

For d = 2 To busDates.Rows.Count + 2
    ActiveSheet.Range("F2:K" & lastRow).Copy
    ActiveSheet.Range("M" & lastRow).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
Next

可能循环busDates可以这样完成:

Dim myCell As Range

For Each myCell In busDates
    If myCell.Row > 2 Then
        'some cut and copy here
    End If
Next myCell

最后但并非最不重要的ActiveSheet一点是,在 VBA 中要避免,但在这种情况下它可能是无害的 - 如何避免在 Excel VBA 中使用 Select

以某种方式工作的整个代码在这里:

Sub TestMe()

    Dim lastRow As Long
    lastRow = WorksheetFunction.Max(Sheets("stack").Cells(Rows.Count, "M").End(xlUp).Row)
    lastRow = lastRow + 1

    Dim busDates As Range
    Set busDates = Sheets("stack").Range("M3:M" & lastRow - 1)

    Dim d As Long
    For d = 2 To busDates.Rows.Count + 2
        ActiveSheet.Range("F2:K" & lastRow).Copy
        ActiveSheet.Range("M" & lastRow).PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
    Next

End Sub

推荐阅读