首页 > 解决方案 > 使用 Excel-VBA 宏从工作簿复制时出现运行时错误“1004”

问题描述

我正在尝试实现一个简单的 Excel-VBA 宏,让用户在文件资源管理器中浏览另一个工作簿,然后将该工作簿中的某些单元格复制到我的活动工作簿中。这是我的短代码:

Sub Load_AutoCADBOM()

   Dim wbk As Workbook

   Dim MyFile As String
   MyFile = Application.GetOpenFilename()

   If MyFile <> "False" Then
      Set wbk = Workbooks.Open(MyFile)
      With wbk.Sheets(1)
         Range("B2:C43").Copy
      End With

  ActiveWorkbook.Close


  With ThisWorkbook.Worksheets("Config")
     Range("A6:B47").PasteSpecial Paste:=xlPasteValues
  End With
   End If

End Sub

该宏旨在从所选工作簿中的 (B2:C43) 复制单元格,并将它们复制到我当前工作簿的工作表“配置”上的单元格 (A6:B47) 中。当我运行宏时,我得到“运行时错误'1004': Range 类的 PasteSpecial 方法失败。” 调试器突出显示该行:

     Range("A6:B47").PasteSpecial Paste:=xlPasteValues

我尝试从 csv、xls 和 xlsm 文件中复制所有文件,结果都相同。这可能是我的单元格在我粘贴到的工作表中的格式吗?有趣的是,我在另一个工作簿中使用了这个宏并且它工作没有问题。

如果有人知道我可以修复我的代码并使其正常工作的任何方式,将不胜感激。

谢谢

结束子

标签: excelvba

解决方案


如果您只想复制值,则可以跳过复制/粘贴并直接从源范围设置值:

Sub Load_AutoCADBOM()

   Dim wbk As Workbook
   Dim MyFile As String
   MyFile = Application.GetOpenFilename()

   If MyFile <> "False" Then
        Set wbk = Workbooks.Open(MyFile)
        With wbk.Sheets(1).Range("B2:C43")
            ThisWorkbook.Worksheets("Config").Range("A6").Resize(.rows.count, .columns.count).value = .Value
        End With
        wbk.Close
    End If

End Sub

推荐阅读