【问题标题】:Paste Run Time Error 1004粘贴运行时错误 1004
【发布时间】:2015-06-04 07:03:03
【问题描述】:

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

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

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

    要修复,请在ShowAllData 之后执行Copy。在你的情况下,你将不得不来回SelectWorksheet

    您通常应该避免在您的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2016-01-06
      相关资源
      最近更新 更多