2017-04-21 297 views
0

我有vba代碼,它使用數據表上的自動篩選器來標識第一列中具有「True」的記錄並刪除可見行。我的代碼工作了幾個月沒有問題,但今天它停止工作,併產生了1004沒有找到記錄錯誤。事情是,我可以看到可見的行,如果我在調試模式下遍歷代碼,它可以正常工作。它是導致問題的整條線。刪除線。任何人都可以幫我弄清楚是什麼讓它停止工作?Excel可見單元格刪除 - 損壞

'Rowzmaster is the count of duplicates 
    If RowzMaster <> 0 Then 

     'Unfilter All 
      If (Sheets("Master Data").AutoFilterMode And Sheets("Master Data").FilterMode) Or Sheets("Master Data").FilterMode Then 
       Sheets("Master Data").ShowAllData 
      End If 

     'Filter 
      Sheets("Master Data").Range("$A$1:$B" & lastRowall).AutoFilter Field:=1, Criteria1:="True" 

     'Remove any records that match raw data (This is where it dies) 
      Sheets("Master Data").Range("$A$2:$B" & lastRowall).SpecialCells(xlCellTypeVisible).EntireRow.Delete 

    End If 

回答

0

您的方式刪除以前的自動過濾器是我的可疑。埃本雖然過去「奏效」,但這可能取決於版本和其他情況。另外,不要忘記,一個AutoFilter總是將第一行視爲標題行,即使情況並非如此。所以你不應該在自動過濾後刪除標題行。嘗試用這種方法重寫這段代碼:

With Sheets("Master Data") 
     If .FilterMode Then .ShowAllData 
     If .AutoFilterMode Then .Cells.AutoFilter 
     With .Range("$A$1:$B" & lastRowall) 
      .AutoFilter Field:=1, Criteria1:="True" 

      '.offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete 
      '^^^^^^^^^ 
      ' You can also delete directly, delete acts only on visible cells 

      .offset(1).EntireRow.Delete 
      .AutoFilter 
     End With 
    End With