首页 > 解决方案 > 从特定工作表复制未知范围

问题描述

我正在尝试在 VBA 中进行复制,作为更大宏的一部分,因此它需要在 VBA 中,在特定工作表中的未知范围内。

如果我在那个工作表中,我有这个代码可以工作:

Sub Copy()
Range("O2", Range("O" & Cells(Rows.Count, "A").End(xlUp).Row)).copy
End Sub()

我有以下适用于特定范围的内容:

Sub Test()
    Worksheets("Data").Range("O2:O10").Copy
End Sub()

如何使第二个代码不特定。

谢谢,

标签: vbaexcelcopy

解决方案


最简单和最肮脏的解决方案是这个:

Range("O2:O" & Cells(Rows.Count, "A").End(xlUp).Row).Copy

或者您可以将最后一行隔离为单独的变量:

lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("O2:O" & lastRow).Copy

最后,可以决定将要复制的范围声明为一个单独的变量并使用它,同时声明父工作表:

Public Sub TestMe()

    Dim lastRow As Long
    Dim ws As Worksheet
    Dim rangeToCopy As Range

    Set ws = workshetes("Sheet1")

    With ws
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        Set rangeToCopy = .Range("O2:O" & lastRow)
        rangeToCopy.Copy
    End With

End Sub

更进一步的是使用专用函数来查找每个工作表的最后一行(此处为 GitHub 存储库):

Function lastRow(wsName As String, Optional columnToCheck As Long = 1) As Long

    Dim ws As Worksheet
    Set ws = Worksheets(wsName)

    lastRow = ws.Cells(ws.Rows.Count, columnToCheck).End(xlUp).Row

End Function

推荐阅读