请求编写VBA代码:将WB1特定行复制到WB2最后一行之后
VBA代码实现跨工作簿复制指定行内容
以下是两种场景下的代码,根据你的实际情况选择使用:
场景1:WB1和WB2均已打开
Sub CopyRowToWB2() Dim wb1 As Workbook, wb2 As Workbook Dim ws1 As Worksheet, ws2 As Worksheet Dim targetRow As Long ' 指定工作簿和工作表 Set wb1 = ThisWorkbook ' 若代码在WB1中运行则用此句,否则替换为Workbooks("WB1.xlsx") Set ws1 = wb1.Worksheets("Sheet1") Set wb2 = Workbooks("WB2.xlsx") ' 确保WB2已打开,文件名需包含后缀(.xlsx/.xlsm等) Set ws2 = wb2.Worksheets("Sheet2") ' 获取WB2的Sheet2最后一行的下一行行号 targetRow = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1 ' 复制指定区域到目标位置 ws1.Range("A2:W2").Copy Destination:=ws2.Cells(targetRow, "A") ' 清除剪贴板状态,避免冗余提示 Application.CutCopyMode = False End Sub
注意点:
- 若代码不在WB1中运行,将
ThisWorkbook替换为Workbooks("WB1.xlsx"),文件名必须与实际一致(包括文件后缀) - 运行前确认WB2已在Excel中打开,否则会触发运行时错误
场景2:WB2未打开,需代码自动打开并操作
Sub CopyRowToClosedWB2() Dim wb1 As Workbook, wb2 As Workbook Dim ws1 As Worksheet, ws2 As Worksheet Dim targetRow As Long Dim wb2FullPath As String ' 替换为WB2的实际完整路径,示例:"C:\Users\XXX\Documents\WB2.xlsx" wb2FullPath = "你的WB2完整路径" Set wb1 = ThisWorkbook Set ws1 = wb1.Worksheets("Sheet1") ' 打开WB2,ReadOnly设为False允许修改,设为True则只读 Set wb2 = Workbooks.Open(Filename:=wb2FullPath, ReadOnly:=False) Set ws2 = wb2.Worksheets("Sheet2") ' 获取目标行号 targetRow = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1 ' 复制数据 ws1.Range("A2:W2").Copy Destination:=ws2.Cells(targetRow, "A") ' 保存并关闭WB2(若不需要保存可删除wb2.Save语句) wb2.Save wb2.Close Application.CutCopyMode = False End Sub
注意点:
- 必须准确填写WB2的完整路径,否则无法找到文件
- 若WB2是只读文件,将
ReadOnly:=False改为ReadOnly:=True,同时删除wb2.Save语句(只读文件无法保存修改)
内容的提问来源于stack exchange,提问作者buntsch
相关产品推荐
相关产品推荐

