2015-06-03 164 views
0

我試圖將一組過濾的數據從一張紙複製到另一張紙的底部。我的代碼工作,除了在打開文件中的第一次偉大的,我得到一個:粘貼運行時錯誤1004

運行時錯誤1004

如果我退出調試和重新運行它的偉大工程的宏。
這裏是我的代碼:注意問題出現在哪裏。

Sub MoveData_Click() 
    'Select the filtered alarm data and paste on the master spreadsheet 
    Sheets("DailyGen").Select 
    ActiveSheet.UsedRange.Offset(5, 0).SpecialCells _ 
     (xlCellTypeVisible).Copy 

    Sheets("2015 Master").Select 

    If ActiveWorkbook.ActiveSheet.FilterMode _ 
    Or ActiveWorkbook.ActiveSheet.AutoFilterMode Then 
     ActiveWorkbook.ActiveSheet.ShowAllData 
    End If 

    Range("C4").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(1, -2).Range("A1").Select 
    ActiveSheet.Paste '~~> THIS IS WHERE IT ERRORS 

    'Sort newest to oldest in the date column 

    ActiveWorkbook.Worksheets("2015 Master").ListObjects("Table44").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("2015 Master").ListObjects("Table44").Sort.SortFields.Add _ 
     Key:=Range("Table44[[#All],[Active Time]]"), _ 
     SortOn:=xlSortOnValues, 
     Order:=xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("2015 Master").ListObjects("Table44").Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
End Sub 

回答

0

當你ShowAllData(相同篩選部分Data->Clear)你清空剪貼板,並告訴Excel中關於複製Range給忘了。在VBA之外進行確認是否需要。 Excel喜歡在編輯單元格時清空剪貼板,或者除了選擇以外,還要做其他任何事情。

要修復,請在ShowAllData之後執行Copy。在你的情況下,你將不得不Select來回Worksheet

您通常應該避免在您的VBA中使用SelectActivateSee this post for details.

下面是最終代碼所做的更改:

Sub MoveData_Click() 

'Select the filtered alarm data and paste on the master spreadsheet 

Sheets("2015 Master").Select 
If ActiveWorkbook.ActiveSheet.FilterMode Or ActiveWorkbook.ActiveSheet.AutoFilterMode Then 
ActiveWorkbook.ActiveSheet.ShowAllData 
End If 

Sheets("DailyGen").Select 
ActiveSheet.UsedRange.Offset(5, 0).SpecialCells _ 
    (xlCellTypeVisible).Copy 

Sheets("2015 Master").Select 
Range("C4").Select 
Selection.End(xlDown).Select 
ActiveCell.Offset(1, -2).Range("A1").Select 
ActiveSheet.Paste 

'Sort newest to oldest in the date column 

ActiveWorkbook.Worksheets("2015 Master").ListObjects("Table44").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("2015 Master").ListObjects("Table44").Sort.SortFields.Add _ 
    Key:=Range("Table44[[#All],[Active Time]]"), SortOn:=xlSortOnValues, Order _ 
    :=xlDescending, DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets("2015 Master").ListObjects("Table44").Sort 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

End Sub