将每10个Excel行复制并粘贴到另一个工作簿循环中

时间:2015-06-04 06:48:53

标签: excel vba excel-vba

从100行(或任意行数,最好是)的Excel工作簿(original_workbook.xlsx)。

我想要一个宏,它将每10行复制并粘贴到一个名为Workbook_ [date] _ [random number] .xlsx的新Excel工作簿中。

注意:original_workbook.xlsx的第一行是每个新工作簿的标题。使用录制的宏,到目前为止我有以下VB代码:

Workbooks.Add
ActiveWorkbook.SaveAs Filename:= _
    "C:\path\Workbook_[date]_[random number].xlsx", FileFormat:= _
    xlOpenXMLWorkbook, CreateBackup:=False

Windows("original_workbook.xlsx").Activate
Rows("1:1").Select
Selection.Copy
Windows("Workbook_[date]_[random number].xlsx").Activate
ActiveSheet.Paste
Windows("original_workbook.xlsx").Activate
Rows("2:11").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Workbook_[date]_[random number].xlsx").Activate
Range("A2").Select
ActiveSheet.Paste
Range("A2").Select
Application.CutCopyMode = False
ActiveWorkbook.Save
Windows("original_workbook.xlsx").Activate
Windows("Workbook_[date]_[random number].xlsx").Activate

我希望上面的代码循环,直到没有剩下的行为止。

我怀疑 Rows("2:11").Select 需要更改。我已经抬头为我做了,但它没有用。谢谢。

1 个答案:

答案 0 :(得分:1)

记录宏是一种很好的方式来了解一个证明所涉及的框架和单个命令,但结果代码在某些方面可能是冗长的,而在其他方面则缺乏。

您录制的宏明确缺少正在复制和粘贴的工作表的名称。这不是录制的一部分,因为它们已经是活动工作表。出于以下代码的目的,我在两个工作簿上都使用了 Sheet1

Dim rw As Long, nwb As Workbook, owb As Workbook

Set owb = Windows("original_workbook.xlsx")
Set nwb = Workbooks.Add
nwb.SaveAs Filename:= _
    "C:\path\Workbook_[date]_[random number].xlsx", FileFormat:= _
    xlOpenXMLWorkbook, CreateBackup:=False

With owb.Sheets("Sheet1")
    .Rows("1:1").Copy _
        Destination:=nwb.Sheets("Sheet1").Range("A1")
    For rw = 2 To 92 Step 10
        .Cells(rw, 1).Resize(10, 1).EntireRow.Copy _
            Destination:=nwb.Sheets("Sheet1").Range("A2").Offset(rw, 0)
    Next rw
    nwb.Save
    .Activate
End With

nwb.Activate

我已经设置了一个循环,但它确实不清楚你想要的结果。如果它们一个堆叠在另一个上面,那么一次复制和粘贴它们会更容易。

有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros