Excel 复制和粘贴错误导致工作簿崩溃

Excel 复制和粘贴错误导致工作簿崩溃,excel,vba,Excel,Vba,我在从一个电子表格复制和粘贴到另一个电子表格时遇到问题 我正在使用以下代码: Sub LoadnH() Dim NF As Workbook Dim shtMain As Worksheet Set shtMain = Worksheets("Main") Dim filePath As String Dim strFileName As Variant strFileName = Application.GetOpenFilename("All File

我在从一个电子表格复制和粘贴到另一个电子表格时遇到问题

我正在使用以下代码:

Sub LoadnH()
Dim NF As Workbook
Dim shtMain As Worksheet

Set shtMain = Worksheets("Main")
Dim filePath As String
Dim strFileName As Variant
    strFileName = Application.GetOpenFilename("All Files (*.*), *.*", , "Select File to Import", , False)
    shtMain.Range("filePath").Value = strFileName
    If strFileName <> False Then
        Set NF = Application.Workbooks.Open(strFileName)
        Application.CutCopyMode = False
        NF.Sheets("Summary").Copy
        Application.DisplayAlerts = False
        NF.Close False

Dim nH As Worksheet
Set nH = Worksheets("Hedge Data")
 nH.Activate
     With nH
        .Cells.Clear
        .Pictures.Delete
        .Range("A1").Select
        .PasteSpecial xlPasteValues
     End With
End If
End Sub
代码显示运行时错误“1004”: 对象“工作表”的“粘贴特殊”方法失败

如何修复此错误?很多时候,当遇到此错误时,excel也会崩溃并关闭。

您可以将目标范围的值与源范围的值分配给

  • 您使用的是,它复制整个
    工作表
    ,而不是工作表的
    范围
    中的数据。这将在每次运行代码时创建源工作表的新副本,但不会将工作表的数据复制到剪贴板。(NB:下面演示如何使用Before参数,该参数指示将
    工作表
    复制到的位置)
  • 将定义范围的数据复制到剪贴板(除非指定目标参数)
  • 您可以使用源范围中的值来指定目标范围的值,而不是使用复制/粘贴等
  • 下面的这些示例都是为了演示上述要点,并使用两个新工作簿(工作簿和工作表的默认名称)进行测试。


    例1 此测试的结果在
    Book2
    上的
    Sheet1
    之前从
    Book1
    创建一份
    Sheet1
    副本


    例2 此示例从
    Book1-Sheet1
    复制单元格
    A1
    ,并将其粘贴到
    Book2-Sheet1
    中的单元格
    A1


    例3 本例将
    Book1-Sheet1
    A1
    Value
    属性指定给
    Book2-Sheet1
    中的单元格
    A1
    。它的结果与相同,例如2,但避免使用
    选择
    复制
    粘贴
    等。与第二个示例相比,该方法速度更快,且通常不易出错


    根据您的环境而定,第一个示例可能是最简单、最快捷的方法。

    虽然这并不能直接回答您的问题,但阅读一下它可以帮助解决您的问题。我已经尽可能地停止使用select,但我想不出一种方法来避免选择
    .Range(“A1”).选择
    .PasteSpecial xlPasteValues
    
    Sub WorksheetCopyMethod()
        Dim SourceWorksheet As Worksheet
        Dim DestinationwWorksheet As Worksheet
        
        Set SourceWorksheet = Workbooks("Book1").Sheets("Sheet1")
        Set DestinationWorksheet = Workbooks("Book2").Sheets("Sheet1")
        
        SourceWorksheet.Copy DestinationWorksheet
    End Sub
    
    Sub RangeCopyMethod()
        Dim SourceWorksheet As Worksheet
        Dim DestinationwWorksheet As Worksheet
        
        Set SourceWorksheet = Workbooks("Book1").Sheets("Sheet1")
        Set DestinationWorksheet = Workbooks("Book2").Sheets("Sheet1")
        
        SourceWorksheet.Range("A1").Copy
        DestinationWorksheet.Range("A1").PasteSpecial xlPasteValues
    End Sub
    
    Sub AvoidSelectMethod()
        Dim SourceWorksheet As Worksheet
        Dim DestinationwWorksheet As Worksheet
        
        Set SourceWorksheet = Workbooks("Book1").Sheets("Sheet1")
        Set DestinationWorksheet = Workbooks("Book2").Sheets("Sheet1")
        
        DestinationWorksheet.Range("A1").Value = SourceWorksheet.Range("A1").Value
    End Sub