Spalten löschen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm MsgBox
Bild

Betrifft: Spalten löschen
von: Markus
Geschrieben am: 21.04.2015 09:39:15

Hallo Forum!
In einer Userform soll ein Datum eingegeben werden.
Nach Betätigen eines Buttons sollen alle Spalten gelöscht werden die kleiner dem Datum sind. Das funktioniert auch ganz gut. Allerdings muss ich den Button immer wieder betätigen, bis alles gelöscht wird. Wie soll der Code aussehen damit nur durch einmaligem Betätigen des Buttons alle Datensätze gelöscht werden?
Hier der Code:

Private Sub cmdDelete_Click()
Dim i As Integer, j As Integer
Dim wks As Worksheet
Dim DatWert As Date
Set wks = Worksheets("04_Monitoring_Neuteil")
i = 5 'Zeile 5
j = 8 'Spalte H
    
    If Not IsDate(txtDat) Then
        MsgBox "Kein gültiges Datum!", vbCritical, "Falsches Datum"
        Exit Sub
    End If
    txtDat = Format(txtDat, "DD.MM.YYYY")
    
DatWert = txtDat.Value
With wks
    Do While .Cells(i, 8) <> ""
        If .Cells(i, 8) < DatWert Then
        Range(.Cells(i, 1), .Cells(i, 10)).Delete shift:=xlUp
        End If
        i = i + 1
    Loop
End With
End Sub

Bild

Betrifft: AW: Spalten löschen
von: Nepumuk
Geschrieben am: 21.04.2015 09:48:40
Hallo,
du zählst zu Zeile immer 1 dazu. Wenn du nun Zeile 5 löschst, dann rutschen die Zeilen nach oben. Aus der ehemaligen Zeile 6 wird die neue Zeile 5 du machst aber in deinem Makro mit Zeile 6 also der ehemaligen Zeile 7 weiter.
Versuch es mal so:

Private Sub cmdDelete_Click()
    Dim i As Integer, j As Integer
    Dim wks As Worksheet
    Dim DatWert As Date
    
    Set wks = Worksheets("04_Monitoring_Neuteil")
    i = 5 'Zeile 5
    j = 8 'Spalte H
    
    If Not IsDate(txtDat) Then
        MsgBox "Kein gültiges Datum!", vbCritical, "Falsches Datum"
        Exit Sub
    End If
    txtDat = Format(txtDat, "DD.MM.YYYY")
    
    DatWert = txtDat.Value
    
    With wks
        Do While .Cells(i, 8) <> ""
            If .Cells(i, 8) < DatWert Then
                Range(.Cells(i, 1), .Cells(i, 10)).Delete shift:=xlUp
            Else
                i = i + 1
            End If
        Loop
    End With
    
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: ...und deshalb...
von: Markus
Geschrieben am: 21.04.2015 09:54:05
...mußte ich immer wieder neu beginnen um alle Werte zu löschen.
Danke für den hinweis.
Gruß
Markus

Bild

Betrifft: AW: ...und deshalb...
von: Werner
Geschrieben am: 21.04.2015 10:48:42
Hallo Markus,
Versuch mal das, löscht von hinten nach vorne bis Zeile 5. So hast du das Problem mit dem Überspringen von Zeilen nicht. Habe es aber nicht getestet, schreibe mit dem Tablet.
Außerdem hattest du die Variable j definiert aber im Code nicht verwendet, ich habe gelöscht.

Private Sub cmdDelete_Click()
 Dim i As Long
Dim loLetzte AS Long
 Dim wks As Worksheet
 Dim DatWert As Date
 
 Set wks = Worksheets("04_Monitoring_Neuteil")
     
     If Not IsDate(txtDat) Then
         MsgBox "Kein gültiges Datum!", vbCritical, "Falsches Datum"
         Exit Sub
     End If
     txtDat = Format(txtDat, "DD.MM.YYYY")
     
 DatWert = txtDat.Value
loLetzte = wks.cells(Rows.Count, 8).End(xlUp).Row
 With wks
     For i = loLetzte To 5 Step -1
         If .Cells(i, 8) < DatWert Then
         Range(.Cells(i, 1), .Cells(i, 10)).Delete shift:=xlUp
         End If
      Next i
 End With
 
 End Sub
Gruß Werner

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Spalten löschen"