将动态范围从一个工作表复制并粘贴到另一个工作表

时间:2016-10-17 15:35:08

标签: excel vba excel-vba dynamic

我正在尝试从“Sheet1”的第2行开始复制A列,并将其粘贴到第5行从第5行开始的“ABC”表中。列A中的行数是可变的,所以我不能使用固定范围

下面的代码可以满足我的需要,但我试图避免使用.Select和.Activate

LastRow = Range("A" & Rows.Count).End(xlUp).Row
Sheets("Sheet1").Range("A2:A" & LastRow).Copy
Sheets("ABC").Activate
Sheets("ABC").Range("C5:C" & LastRow).Select
Selection.PasteSpecial xlPasteValues

我尝试使用以下代码将列设置为彼此:

  Sheets("ABC").Range("C5").End(xlDown).Value=Sheets("Sheet1").Range("A2:A" & LastRow).Value

这样运行没有错误,但它“什么都不做” - 工作表“ABC”上没有数据

我也尝试过:

    Dim WS As Worksheet
    Dim wsABC As worksheet


    Set WS = Sheets("Sheet1")
    Set wsABC = Sheets("ABC")
    LastRow = Range("A" & Rows.Count).End(xlUp).Row

    WS.Range("A2:A" & LastRow).Copy
    wsABC.Range("C5").End(xlDown).Paste

这会产生“运行时错误#438对象不支持此属性或方法”此行上的错误:

 wsABC.Range("C5").End(xlDown).Paste

我尝试的另一种方法如下:

Dim WS As Worksheet

    Set WS = Sheets("Sheet1")
    Set wsABC = Sheets("ABC")


  With WS
  LastRow = Range("A" & Rows.Count).End(xlUp).Row
  WS.Range("A2:A" & LastRow).value = wsABC.Range("C5:C & LastRow").Value

End With

这会产生“运行时错误'1004'应用程序定义或对象定义错误。

我愿意对我的任何尝试进行更正/评论,我只是想避免使用.Select和.Activate。

提前感谢您的时间和帮助!

2 个答案:

答案 0 :(得分:2)

编码风格可能差异很大。这是实现您正在寻找的一种方式:

Sub tgr()

    Dim wb As Workbook
    Dim wsData As Worksheet
    Dim wsDest As Worksheet

    Set wb = ActiveWorkbook
    Set wsData = wb.Sheets("Sheet1")
    Set wsDest = wb.Sheets("ABC")

    With wsData.Range("A2", wsData.Cells(wsData.Rows.Count, "A").End(xlUp))
        wsDest.Range("C5").Resize(.Rows.Count).Value = .Value
    End With

End Sub

答案 1 :(得分:1)

lines.stream().map(String::trim).filter(line -> !line.startsWith("#")).map(String::toLowerCase).forEach(System.out::println);