VBA跨工作簿复制粘贴出现Runtime Error 1004错误求助
解决VBA复制粘贴时的Runtime Error 1004问题
你的代码里有几个明显问题,虽然最终任务能完成,但冗余操作触发了报错:
问题根源
- 重复复制覆盖剪贴板:你先执行了
x.Sheets("Sheet1").Range("A1:P10781").Copy,紧接着又用ws1.Cells.Copy ws2.Cells直接复制整个工作表内容到目标位置,此时剪贴板内容已被替换,后续调用PasteSpecial时没有有效复制内容,自然报错。 - 多余的PasteSpecial调用:
ws1.Cells.Copy ws2.Cells本身已经完成了复制粘贴操作(直接把源表所有内容复制到目标表),再调用PasteSpecial完全没必要。
修正后的代码(两种可选方案)
方案1:复制指定区域(A1:P10781)
如果你的需求是复制特定范围而非整个工作表,用这个版本:
Sub CopyWorksheet() Dim x As Workbook Dim y As Workbook Dim ws1 As Worksheet Dim ws2 As Worksheet ' 打开工作簿,建议加上文件扩展名(比如.xlsx/.xls),避免识别错误 Set x = Workbooks.Open("C:\Users\KimBush\Documents\NP Credentials Project\Greater than 30 days project\Macro Testing\NPPIndependentStatusReport.xlsx") Set y = Workbooks.Open("C:\Users\KimBush\Documents\NP Credentials Project\Greater than 30 days project\Macro Testing\DKC-IKC NP Credentialing Update Testing.xlsx") ' 绑定工作表对象 Set ws1 = x.Sheets("Sheet1") Set ws2 = y.Sheets("Source") ' 复制指定区域并粘贴到目标位置,如需指定粘贴类型可加参数(比如Paste:=xlPasteValues只复制值) ws1.Range("A1:P10781").Copy ws2.Range("A1").PasteSpecial ' 可选:根据需求关闭工作簿,调整保存状态 x.Close SaveChanges:=False y.Close SaveChanges:=True End Sub
方案2:复制整个工作表内容
如果需要复制整个工作表的所有内容,用这个更简洁的版本:
Sub CopyWorksheet() Dim x As Workbook Dim y As Workbook Dim ws1 As Worksheet Dim ws2 As Worksheet ' 打开工作簿,加上扩展名更稳妥 Set x = Workbooks.Open("C:\Users\KimBush\Documents\NP Credentials Project\Greater than 30 days project\Macro Testing\NPPIndependentStatusReport.xlsx") Set y = Workbooks.Open("C:\Users\KimBush\Documents\NP Credentials Project\Greater than 30 days project\Macro Testing\DKC-IKC NP Credentialing Update Testing.xlsx") ' 绑定工作表对象 Set ws1 = x.Sheets("Sheet1") Set ws2 = y.Sheets("Source") ' 一步完成整个工作表内容的复制粘贴 ws1.Cells.Copy ws2.Cells ' 可选:关闭工作簿 x.Close SaveChanges:=False y.Close SaveChanges:=True End Sub
额外提示
- 若仅需复制单元格值(不需要格式、公式等),可以用
ws2.Range("A1:P10781").Value = ws1.Range("A1:P10781").Value,这种方式更高效,还不会占用剪贴板。
内容的提问来源于stack exchange,提问作者Kim
相关产品推荐
相关产品推荐

