Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel vba宏:将特定列复制并粘贴到其他工作簿_Vba_Excel - Fatal编程技术网

excel vba宏:将特定列复制并粘贴到其他工作簿

excel vba宏:将特定列复制并粘贴到其他工作簿,vba,excel,Vba,Excel,我对宏和VBA编码是新手。我有两本工作手册。一个是report.xls,另一个是AT.xlsm。 在report.xls中,有一张名为“服务”的表 在AT.xlsm中,有一张名为“工作表”的工作表。 我想自动将报告的第一行B、C、F、J、E、D列复制到AT的A、C、D、E、F、H列。 所以,我试着记录一个宏并修改代码,它可以复制和粘贴,但它保存到了相同的位置 请告诉我如何粘贴到新行好吗 多谢各位 代码: 我将使用你的一部分代码。 录制宏时生成的VBA代码不是最好的选择,但这次我将使用该代码,以避

我对宏和VBA编码是新手。我有两本工作手册。一个是report.xls,另一个是AT.xlsm。

在report.xls中,有一张名为“服务”的表

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

我想自动将报告的第一行B、C、F、J、E、D列复制到AT的A、C、D、E、F、H列。 所以,我试着记录一个宏并修改代码,它可以复制和粘贴,但它保存到了相同的位置

请告诉我如何粘贴到新行好吗

多谢各位

代码:


我将使用你的一部分代码。 录制宏时生成的VBA代码不是最好的选择,但这次我将使用该代码,以避免对您进行复杂的操作

原始代码:

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

希望有帮助。

您不应该激活并选择任何要复制到其他工作表的内容。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)上的5380替换为


将列(此处为“D”)更改为您需要的列。

感谢您的回复,并添加使我更容易理解的注释。感谢您的回复,我可以知道如何更改单元格(5380)吗到A列任何一行中的单元格?我并不总是想要5380单元格。我想粘贴我的数据,然后转到最后一行+1。单元格会随着每次复制和粘贴而更改,我需要在代码中更改什么?非常感谢您的帮助。我会尝试的。
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.Range("D" & wss.Rows.Count).End(xlUp).Row +1