从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
需要更改。我已经抬头为我做了,但它没有用。谢谢。
答案 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。