Vba 粘贴运行时错误1004

Vba 粘贴运行时错误1004,vba,excel,Vba,Excel,我试图将一组过滤后的数据从一张工作表复制到另一张工作表的底部。我的代码运行良好,除了第一次打开文件时,我得到: 运行时错误1004 如果退出调试器并重新运行宏,效果会很好。 下面是我的代码:注意问题发生的位置 Sub MoveData_Click() 'Select the filtered alarm data and paste on the master spreadsheet Sheets("DailyGen").Select ActiveSheet.UsedRa

我试图将一组过滤后的数据从一张工作表复制到另一张工作表的底部。我的代码运行良好,除了第一次打开文件时,我得到:

运行时错误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

当您
显示所有数据
(与过滤器部分中的
数据->清除
相同)时,您正在清空剪贴板,并告诉Excel忘记复制的
范围
。在VBA之外执行此操作以确认是否需要。Excel喜欢在编辑单元格或执行除选择以外的其他操作时清空剪贴板

要修复此问题,请在
ShowAllData
之后执行
Copy
。在您的情况下,您必须来回选择
工作表

通常,您应该避免对VBA使用
Select
Activate

以下是最后的代码以及所做的更改:

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