2016-09-29 36 views
0

我正在写一个循环遍历“源”工作表的宏,并且为列A中的每个值复制范围从模板工作表到目标工作表。在复制模板范围之后,我需要根据源工作表值更改目标工作表中的几个值。现在我试图让副本工作。复制失败,错误1004'由于“复制”区域和粘贴区域的大小不一样,因此无法粘贴信息。将范围复制到另一个工作表的底部

Sub CopyRangeFromOneSheetToAnother() 
    Dim iLastRow As Long 
    Dim wb As Workbook 
    Dim shtSource As Worksheet 
    Dim shtTemplate As Worksheet 
    Dim shtDest As Worksheet 
    Dim sResourceName 
    Dim rngCalcTemplate As Range 


    Set wb = ThisWorkbook 
    Set shtSource = wb.Sheets(1) 
    Set shtTemplate = wb.Sheets("res_tpl") 
    Set shtDest = wb.Sheets.Add 

    '--set range for copying. Hard-coded for now would be nice if it would auto shrink/expand 
    Set rngCalcTemplate = shtTemplate.Range("A2:M7") 

    'Find the last row (in column A) with data. 
    iLastRow = shtSource.Range("A:A").Find("*", searchdirection:=xlPrevious).Row 

    '--loop through source sheet and copy template range to dest for each 

    For iSourceSheetRow = 2 To iLastRow 
     sResourceName = shtSource.Cells(iSourceSheetRow, 1) 
     rngCalcTemplate.Copy shtDest.Range("A" & Rows.Count).End(xlDown) 
    Next 
End Sub 
+0

你需要'Rows.Count'之前添加纸张太,'shtDest。范围(“A”&shtDest.Rows.Count).End(xlDown)'。否则,'rows.count'将在任何'ActiveSheet'上运行。不知道这是否会解决它,但它应该有所帮助。 (如果这不能解决问题,您只需将paste * to *范围调整为与复制的大小相同)。 – BruceWayne

回答

0

的问题是使用以下行代码的:

rngCalcTemplate.Copy shtDest.Range("A" & Rows.Count).End(xlDown) 

如果您将光标在A列的最后单元(即在"A" & Rows.Count,可能A1048576),然后按Ctrl-Down,您仍然位于列A中的最后一个单元格。

如果您然后尝试粘贴从该单元格开始的6行信息,则不会有空间这样做 - 只有一排“粘贴”区域使用。

你可能想找到该列中最后使用的电池继行,所以你的代码应该是:

rngCalcTemplate.Copy shtDest.Range("A" & shtDest.Rows.Count).End(xlUp).Offset(1, 0) 
相关问题