将范围复制到另一个工作表的底部

时间:2016-09-29 18:01:48

标签: excel excel-vba vba

我正在编写一个循环遍历“源”工作表的宏,并且对于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

1 个答案:

答案 0 :(得分: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)