2013-02-07 101 views
0

我一直在努力學習更好的代碼,並從這個網站和其他人的例子 - 但是我似乎無法通過運行時錯誤1004「工作表類的粘貼方法失敗」。我有兩個其他類似的宏和一個將運行所有的3個按鈕。它運行前兩個相同的語法,粘貼到「MyQueue」文件中很好,但第三個不會粘貼並引發此錯誤。誰能幫忙?VBA粘貼方法

Sub CSQAgentSummaryEdit() 

Dim MyPath As String 
MyPath = " path " 
MyFile = " file " 
QueuePath = "path " 
MyQueue = " file " 
Dim wb1 As Workbook 
Dim wb2 As Workbook 

Set wb1 = Workbooks.Open(QueuePath) 
Set wb2 = Workbooks.Open(MyPath) 

Columns("A:V").Delete Shift:=xlUp 
Columns("B").Delete Shift:=xlUp 
Columns("C:R").Delete Shift:=xlUp 


Range("A1").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(2, 0).Range("A1").Select 
    Selection.consolidate Sources:= _ 
    "'file data " _ 
    , Function:=xlSum, LeftColumn:=True 

    Range("A1").CurrentRegion.Delete Shift:=xlUp 
    Rows("1:1").Delete 

    Range("A1").CurrentRegion.Select 
    With Selection.Borders 
    .LineStyle = xlContinuous 
    .Weight = xlThin 
    .ColorIndex = xlAutomatic 
    End With 

    Selection.Copy 
    Workbooks.Open (QueuePath) 
    Range("A1").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(20, 0).Range("A1").Select 
    ActiveSheet.Paste , False 
    Workbooks(MyQueue).Save 
    Workbooks(MyFile).Close False 

End Sub 
+0

你在這個宏中有很多事情發生,所以我建議你分解它並簡化故障排除的目的。減少變量直到它工作,然後恢復工作。 – Smandoli

回答

1

您似乎打開兩次QueuePath工作簿。

而不是

Selection.Copy 
Workbooks.Open (QueuePath) 
Range("A1").Select 

嘗試

Selection.Copy 
wb2.Sheets("Sheet1").Range("A1").Select 

指定哪些工作簿時使用的是有利於避免粘貼到了錯誤的工作簿/粘貼錯誤。

0

請記住,Excel受外部影響和其自身行爲的影響。 VBA一般不是。主動 - 任何東西通常都是不可取的。始終更好:

set wsc = Sheets("Copy Sheet") 
set wsp = Sheets("Paste Sheet") 

..然後指定範圍內的範圍。

我也一直使用.PasteSpecial而不是.Paste--它會導致更少的錯誤,並且不依賴於激活工作表,但這實際上是解決問題的線索。

所以,這一部分:

Selection.Copy 
Workbooks.Open() 'I also think you did this twice so it could be removed, but see below 
Range("A1").Select 
Selection.End(xlDown).Select 
ActiveCell.Offset(20, 0).Range("A1").Select 
ActiveSheet.Paste , False 

你並不需要選擇每一個單元,並作爲一個小點,.Cells(1)可以更容易比.Range閱讀( 「A1」)當指定一個單元格時 - 但兩者都可行。只是爲了破產,並試試這個:

set rngToCopy = Selection 
Set wsToPaste = wb2.Sheets("Name of Sheet") 'you don't need this if there's one sheet in the wb 
rngToCopy.copy 
wsToPaste.Cells(1).End(xlDown).Offset(20, 0).PasteSpecial 
Application.CutCopyMode = False