2017-04-21 293 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