excel vbamacros:复制并粘贴到另一个工作簿的特定列

我是新的macros和VBA编码。

我有两个工作簿。 一个是report.xls,另一个是AT.xlsm。

在report.xls中,有一个名为“Service”的表单。

在AT.xlsm中,有一个名为“Worksheet”的工作表。

我想自动复制列B,C,F,J,E,D期望第一行报告到AT的列A,C,D,E,F,H。 所以,我尝试loggingmacros并修改代码,它可以复制和粘贴,但保存到相同的位置。

你能告诉我如何粘贴到新的行?

非常感谢你。

码:

Sub Module1() 'Hot key: Ctrl+Shift+G Windows("report.xls").Activate Range("B2").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Windows("AT.xlsm").Activate ActiveSheet.Paste Windows("report.xls").Activate Range("C2").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy Windows("AT.xlsm").Activate Range("C5380").Select ActiveSheet.Paste Windows("report.xls").Activate Range("F2").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy Windows("AT.xlsm").Activate Range("D5380").Select ActiveSheet.Paste Windows("report.xls").Activate Range("J2").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy Windows("AT.xlsm").Activate Range("E5380").Select ActiveSheet.Paste Windows("report.xls").Activate Range("E2").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy Windows("AT.xlsm").Activate Range("F5380").Select ActiveSheet.Paste Windows("report.xls").Activate Range("D2").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy Windows("AT.xlsm").Activate Range("H5380").Select ActiveSheet.Paste Windows("report.xls").Activate Range("G2").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy Windows("AT.xlsm").Activate Range("J5380").Select ActiveSheet.Paste Range("F5380").Select Range(Selection, Selection.End(xlDown)).Select Selection.Replace What:="[S]", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub 

您不应该激活并select任何内容复制到另一个工作表。 wss和wsw是显式引用到您的工作表。

 Sub Tester546() Set wb = Workbook("report.xls") Set wb2 = Workbook("AT.xlsm") Set wss = wb.Sheets("Service") Set wsw = wb.Sheets("Worksheet") wss.Range(wss.Cells(2, 2), wss.Cells(wss.Range("B" & wss.Rows.Count).End(xlUp).Row, 2)).Copy wsw.Cells(1, 1) wss.Range(wss.Cells(2, 3), wss.Cells(wss.Range("C" & wss.Rows.Count).End(xlUp).Row, 3)).Copy wsw.Cells(5380, 3) wss.Range(wss.Cells(2, 6), wss.Cells(wss.Range("F" & ws.Rows.Count).End(xlUp).Row, 6)).Copy wsw.Cells(5380, 4) wss.Range(wss.Cells(2, 10), wss.Cells(wss.Range("J" & wss.Rows.Count).End(xlUp).Row, 10)).Copy wsw.Cells(5380, 5) wss.Range(wss.Cells(2, 5), wss.Cells(wss.Range("E" & wss.Rows.Count).End(xlUp).Row, 5)).Copy wsw.Cells(5380, 6) wss.Range(wss.Cells(2, 4), wss.Cells(wss.Range("D" & wss.Rows.Count).End(xlUp).Row, 4)).Copy wsw.Cells(5380, 8) wsw.Range(wsw.Cells(5380, 6), wsw.Cells(wsw.Range("F" & wsw.Rows.Count).End(xlUp).Row, 6)).Replace What:="[S]", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End Sub 

您应该能够用目标工作表(wsw)replace5380

 wsW.Range("D" & wss.Rows.Count).End(xlUp).Row +1 

将列(这里是“D”)更改为所需的列。

我将使用你的代码的一部分。 录制macros时创build的VBA代码并不是最好的select,但是这次我将使用这些代码,以免对你做复杂的事情。

原始码:

 Windows("report.xls").Activate Range("B2").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Windows("AT.xlsm").Activate ActiveSheet.Paste 

修改如下:

 Windows("report.xls").Activate 'This activate the report Range("B2").Select 'This selects B2 cell Range(Selection, Selection.End(xlDown)).Select 'This expands the selection down Selection.Copy 'This copy the selection. Windows("AT.xlsm").Activate 'This activate the AT file Range("B2").Select '**** Here you should modify to select the Paste destination cell ActiveSheet.Paste 'This Paste the values 

希望能帮助到你。