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