0

今日を過ぎた日付がある場合にのみ行を削除しようとしていますが、将来または空白の場合はそうではありません。現在、日付のない行を保持したいので、空白がない場合に行を削除しないようにコードを取得するのに苦労しています。

Sub deleteSpudedWells()
Dim lastRow As Integer
Dim firstRow As Integer
Dim ctr As Integer

Dim currentCell As Range
Dim valueOfDColumn
Dim NoNSpudedWells As Boolean



 lastRow = 300
 firstRow = 10

 Application.ScreenUpdating = False
 With Sheets("NDIC Renewals")
     For ctr = lastRow To firstRow Step -1
         Set currentCell = .Cells(ctr, 4)
         valueOfDColumn = currentCell.Value
         NoNSpudedWells = valueOfDColumn >= Date


         If Not NoNSpudedWells Then
             Debug.Print "deleting row of cell " + currentCell.Address
             currentCell.EntireRow.Delete
         End If
     Next
 End With
 Application.ScreenUpdating = True
 End Sub
4

3 に答える 3

1

これを試してみてください:

    For ctr = lastRow To firstRow Step -1
         Set currentCell = .Cells(ctr, 4)
         valueOfDColumn = currentCell.Value               

         If NOT (valueOfDColumn >= Date or currentCell.Value = "") Then
             Debug.Print "deleting row of cell " + currentCell.Address
             currentCell.EntireRow.Delete
         End If
     Next

ところで、デフォルトのままにするのではなく、valueOfDColumnとして 宣言するのが最善です:)Datevariant

于 2012-12-20T22:01:51.390 に答える
1

次の場合に別の条件を追加します。

If Not NoNSpudedWells AND valueOfDColumn <> 0 Then

が空白の場合currentCell、その値は=0になります。

于 2012-12-20T22:00:12.020 に答える
1

BonCodigo のおかげでアイデアが浮かび、コードを機能させることができました。コードを適切に実行するには、これを読む必要がありますvalueOfDColumn = ""

 Sub deleteSpudedWells()
     Dim lastRow As Integer
     Dim firstRow As Integer
     Dim ctr As Integer

     Dim currentCell As Range
     Dim valueOfDColumn
     Dim NoNSpudedWells As Boolean

     lastRow = 300
     firstRow = 10

     Application.ScreenUpdating = False
     With Sheets("NDIC Renewals")
         For ctr = lastRow To firstRow Step -1
             Set currentCell = .Cells(ctr, 4)
             valueOfDColumn = currentCell.Value
             NoNSpudedWells = valueOfDColumn >= Date Or valueOfDColumn = ""

             If Not NoNSpudedWells Then
                 Debug.Print "deleting row of cell " + currentCell.Address
                 currentCell.EntireRow.Delete
             End If
         Next
     End With
     Application.ScreenUpdating = True
 End Sub
于 2012-12-20T22:16:04.963 に答える