2017-04-21 8 views
0

壊れIが最初の列に「真」を有するレコードを識別するために、データシートにオートフィルタを使用して表示される行を削除するVBAコードを有しています。私のコードは問題なく何ヶ月も働いていましたが、今日は動作を停止し、レコードが見つかりませんでした。問題は、可視の行を見ることができ、デバッグモードでコードを歩いてもうまくいきます。この問題を引き起こすのは、全体のrow.delete行です。誰も私はそれが動作を停止させたものを把握するのを助けることができる?Excelの表示セルdelete-

'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

あなたの以前のオートフィルタを削除する方法は私には間違いです。以前は「うまくいった」が、バージョンやその他の状況によって異なる可能性があります。また、それが当てはまらない場合であっても、オートフィルタは常にヘッダ行、第1行を考慮することを忘れてはいけません。したがって、オートフィルタの後でヘッダー行を削除しないでください。コードのこの部分をこのように書き換えてみます

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 
関連する問題