2016-10-17 121 views
1

我试图从第2行“Sheet1”开始复制A列,并将其从第5行开始粘贴到工作表“ABC”上的C列中。Column A是可变的,所以我不能使用固定范围。将动态范围从一个工作表复制并粘贴到另一个

下面的代码做什么,我需要的,但我试图避免使用。选择和.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

编码风格可能差别很大。这里有一种方法来做你想找的东西:

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
With Worksheets("Sheet 1") 
    With .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) 
     Worksheets("ABC").Range("C5").Resize(.Rows.Count).Value = .Value 
    End With 
End With 
相关问题