如何解决跨Excel文件复制数据的VBA代码无报错但无效果问题
VBA代码问题排查与修复方案
存在的问题
- 多余的
Selection.Copy语句:执行ThisWorkbook.Worksheets("Sheet1").Rows(12).Copy后已经把第12行存入剪贴板,后续的Selection.Copy会用当前选中的内容覆盖剪贴板内容,若当前选中的是空区域,就会导致后续粘贴为空,这是最核心的问题。 - 参数拼写错误:
ActiveWorkbook.Close savehanges = True里的savehanges拼写错误,正确应为SaveChanges,虽然前面已经执行过Save操作,该错误不会直接导致粘贴失败,但属于隐性语法问题。 - 依赖
Activate、Select的不稳定写法:这类操作容易因为运行时窗口焦点、选中区域变化导致执行异常,不推荐使用。
修复后的完整代码
Private Sub CommandButton2_Click() Dim wb As Workbook Dim targetSheet As Worksheet Dim lastRow As Long ' 打开目标文件,直接获取目标工作表对象 Set wb = Workbooks.Open("C:\Users\admin\Desktop\TEST\Zeszyt2.xlsm") Set targetSheet = wb.Worksheets("Sheet2") ' 计算目标表第一列最后一个非空行的行号 lastRow = targetSheet.Cells(targetSheet.Rows.Count, 1).End(xlUp).Row ' 直接复制行到目标位置,无需选中和激活操作 ThisWorkbook.Worksheets("Sheet1").Rows(12).Copy Destination:=targetSheet.Cells(lastRow + 1, 1) ' 保存并关闭目标文件 wb.Save wb.Close SaveChanges:=True ' 释放对象内存 Set targetSheet = Nothing Set wb = Nothing ' 清理剪贴板 Application.CutCopyMode = False End Sub
补充注意事项
运行代码前请确认Zeszyt2.xlsm未被其他程序占用、未处于只读打开状态,否则会导致保存失败。
内容的提问来源于stack exchange,提问作者Przemek Dabek
相关产品推荐
相关产品推荐

