当前位置: 首页 > 知识库问答 >
问题:

从一个工作表复制/粘贴到另一个工作表中下一个可用列的范围

云卓
2023-03-14

我有第一部分,但在挣扎第二部分:

Sub sbCopyRangeToAnotherSheet()
'Set range
Sheets("Sheet1").Range("A2:B10").Copy  Destination:=Sheets("Sheet2").Range("A2")
'Copy the data
Sheets("Sheet1").Range("A2:B10").Copy
'Activate the destination worksheet
Sheets("Sheet2").Activate
'Select the target range
Range("A2").Select
'Paste in the target destination
ActiveSheet.Paste

Application.CutCopyMode = False
End Sub

共有1个答案

桂杰
2023-03-14

这将在不使用activeselect的情况下完成任务:

Option Explicit

Sub TestMe()

    Dim ws1         As Worksheet
    Dim ws2         As Worksheet        
    Dim source      As Range
    Dim target      As Range        
    Dim lastColumn  As Long

    Set ws1 = Worksheets(1)
    Set ws2 = Worksheets(2)

    With ws2
        lastColumn = .Cells(2, .Columns.Count).End(xlToLeft).Column
        If WorksheetFunction.CountA(.Columns(1)) > 0 Then
            lastColumn = lastColumn + 1
        End If
    End With

    Set source = ws1.Range("A2:A10")
    Set target = ws2.Cells(2, lastColumn)

    source.Copy destination:=target
    Application.CutCopyMode = False

End Sub

代码中最棘手的部分是在目标工作表上的正确列上开始写入。如果工作表为空,则正确的列是第一列。在其他情况下,正确的列是最后一列+1。

查找最后使用的列-range.end(xlToLeft).column的标准方法总是将第一列作为最后使用的列返回,W/O注意它是否被使用。因此,您需要某种检查来知道它是否为空:worksheetfunction.counta(.columns(1))>0

 类似资料: