Excel-VBA范围类别的PasteSpecial方法失败

时间:2015-06-30 22:10:01

标签: excel vba excel-vba

Excel宏旨在使用FileToOpen将范围从一个工作簿复制到另一个工作簿。相同的代码今天早些时候在单独的工作簿中工作。

生成的错误是运行时1004'类的PasteSpecial方法失败。这是失败的部分:

    SrcWB.Worksheets("1").Range("A1:K35").Copy
    TgtWB.Sheets("1").Range("A1:K35").PasteSpecial (xlPasteValues)
    TgtWB.Sheets("1").Range("A1:K35").PasteSpecial (xlPasteFormats)

PasteSpecial值和格式都会出现错误。我也尝试过使用:

   SrcWB.Worksheets("1").Range("A1:K35").Value = TgtWB.Sheets("1").Range("A1:K35")

上面的方法没有创建任何错误,但是没有值传输到目标工作簿。

今天下午大部分时间我都在咀嚼,感谢任何帮助!

这是完整的代码:

Sub CopySch()

Dim sh As Worksheet
Dim TgtWB As Workbook
Dim SrcWB As Workbook

Application.EnableEvents = False
Application.ScreenUpdating = False

Set TgtWB = ThisWorkbook

FileToOpen = Application.GetOpenFilename(FILEFILTER:="Excel Workbooks (*.xls*),*.xls*", Title:="Please select a file")

If FileToOpen = False Then
    MsgBox "No File Specified.", vbExclamation, "ERROR"
    Exit Sub

Else
    Set SrcWB = Workbooks.Open(FileToOpen, xlUpdateLinksNever, ReadOnly:=True)


    SrcWB.Worksheets("1").Range("A1:K35").Copy
    TgtWB.Sheets("1").Range("A1:K35").PasteSpecial (xlPasteValues)
    TgtWB.Sheets("1").Range("A1:K35").PasteSpecial (xlPasteFormats)

End If

Application.EnableEvents = True
Application.ScreenUpdating = True

SrcWB.Close

End Sub

1 个答案:

答案 0 :(得分:0)

转到模块的顶部并添加" Option Explicit"。

Option Explicit

Sub CopySch()

Dim sh As Worksheet
Dim TgtWB As Workbook
Dim SrcWB As Workbook
...

它应该可以解决你的问题。

编辑: 让我们再试一次这段代码。我已经尝试了它没有错误的代码。

Option Explicit
Sub CopySch()

Dim sh As Worksheet
Dim TgtWB As Workbook
Dim SrcWB As Workbook
Dim FileToOpen As String
Application.EnableEvents = False
Application.ScreenUpdating = False

Set TgtWB = ThisWorkbook

FileToOpen = Application.GetOpenFilename(FILEFILTER:="Excel Workbooks (*.xls*),*.xls*", Title:="Please select a file")

If FileToOpen = "False" Then
    MsgBox "No File Specified.", vbExclamation, "ERROR"
    Exit Sub

Else
    Set SrcWB = Workbooks.Open(FileToOpen, xlUpdateLinksNever, ReadOnly:=True)

    SrcWB.Worksheets("1").Range("A1:K35").Copy
    TgtWB.Sheets("1").Range("A1:K35").PasteSpecial (xlPasteValues)
    TgtWB.Sheets("1").Range("A1:K35").PasteSpecial (xlPasteFormats)

End If

Application.EnableEvents = True
Application.ScreenUpdating = True

SrcWB.Close

End Sub