2015-06-03 88 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