2015-06-30 73 views
1

Excel宏旨在使用FileToOpen將範圍從一個工作簿複製到另一個工作簿。相同的代碼今天早些時候在單獨的工作簿中工作。Excel- VBA PasteSpecial方法的範圍級別失敗

生成的錯誤是運行時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) 

在粘貼特定值和格式時都會出現錯誤。我也嘗試使用:

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

'工作表(「1」)'表示名爲「1」的工作表,而不是書中的第一個工作表。源和目標工作簿中的相關工作表實際上是否被稱爲「1」?如果不是,請嘗試'工作表(1)' – barrowc

+0

是的,工作表都被稱爲「1」 – Jenga

+0

「_...但是沒有值被傳輸到目標工作簿...」。這是因爲您正在複製_from_'TgtWB' _to_'SrcWB' –

回答

0

轉到您的模塊的頂部,並添加 「選項顯式」。

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 
+0

我試着在研究答案時加入「Option Explicit」。然後它爲FileToOpen拋出「Complier error:Variable not defined」。我試圖將FileToOpen註釋掉,以便通過它,但是由於它嵌入到SrcWB變量中,我無法弄清楚代碼中是否有其他編譯器錯誤。 – Jenga

+0

增加了額外的信息 – noas

+0

@Jenga「編譯器錯誤:變量未定義」正是「Option Explicit」的要點 - 它強制你聲明所有變量,以便在某處發生錯字時代碼不會編譯。 –

相關問題