Datensatz löschen

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

Betrifft: Datensatz löschen
von: Andreas
Geschrieben am: 19.04.2005 09:34:49
Hallo Leute,
ich benutze folgenden Code, um einen Datensatz im Arbeitsblatt "SerienNr" in Spalte B auszusuchen (mit einer Inputbox), und zu löschen, wenn in Spalte C "dBa" steht.
Die Seriennummer kann 2-fach vorkommen, aber nur der Datensatz mit dBa soll gelöscht werden.
Das ganze funktioniert soweit recht gut, wenn der Datensatz mit dBa vor dem Datensatz ohne dBa steht.
Ist es umgekehrt, wird der Datensatz nicht gelöscht.
Gibt es dafür auch eine Lösung?


Sub Andreas()
Dim Mldg, Titel, Wert, Zelle
Mldg = "Serien-Nr eingeben"
Titel = "Datesatz löschen"
Wert = InputBox(Mldg, Titel)
With Worksheets("SerienNr").Columns(2)
    Set Zelle = .Find(Wert, LookIn:=xlValues, LookAt:=xlWhole)
    If Not Zelle Is Nothing And Zelle(1, 2) = "dBa" Then
    Rows(Zelle(1, 2).Row).Delete Shift:=xlUp
    End If
End With
End Sub

Im Voraus schon mal herzlichen Dank.
Gruß Andreas
Bild

Betrifft: AW: Datensatz löschen
von: Ramses
Geschrieben am: 19.04.2005 10:04:40
Hallo
probier mal

Sub Andreas()
Dim Mldg, Titel, Wert, Zelle
Mldg = "Serien-Nr eingeben"
Titel = "Datesatz löschen"
Wert = InputBox(Mldg, Titel)
With Worksheets("SerienNr").Columns(2)
    Set Zelle = .Find(Wert, LookIn:=xlValues, LookAt:=xlWhole)
    If Not Zelle Is Nothing And Zelle.Offset(1, 2) = "dBa" Then
    Rows(Zelle(1, 2).Row).Delete Shift:=xlUp
    End If
End With
End Sub

Wobei ich nicht weiss ob das "Offset(1, 2)" nun korrekt ist. Ich habe es einfach mal deinem code so entnommen.
Es wird geprüft ob die zelle darunter !!! und 2 Spalten Rechts von der gefundenen Zelle der Begriff vorkommt. Steht dîese Zelle in der gleichen Zelle, ändere die 1 in 0
Gruss Rainer
Bild

Betrifft: AW: Datensatz löschen
von: Andreas
Geschrieben am: 19.04.2005 10:33:51
Hallo Rainer,
funktioniert leider nicht.
Der zu löschende Datensatz ist oft etliche Zeilen von dem anderen Datensatz entfernt.
Wenn ich das recht verstanden habe, funktioniert der Code dann sowiso nicht.
Gibt es noch eine andere Lösung?
Ich möchte eigentlich nur die Zeile Löschen, in der die gesuchte Seriennummer in Spalte B, und dBa in Spalte C steht.
Gruß Andreas
Bild

Betrifft: AW: Datensatz löschen
von: Ramses
Geschrieben am: 19.04.2005 11:07:21
Hallo
dann ändere die Zeile
Rows(Zelle(1, 2).Row).Delete Shift:=xlUp
in
Rows(Zelle.Row).Delete Shift:=xlUp
Gruss Rainer
Bild

Betrifft: AW: Datensatz löschen
von: Andreas
Geschrieben am: 19.04.2005 11:50:13
Hallo Rainer,
geht immer noch nicht.
Jetzt löscht es mir den Datensatz, in dem nicht dBa steht, wenn dieser im Arbeitsblatt vor dem Datensatz mit dBa kommt.
Gibt es mit VBA eine Möglichkeit, eine Zeile zu suchen, in der in Spalte B eine bestimmte Nummer und in Spalte C dBa steht, und diese Zeile dann zu löschen?
Gruß Andreas
Bild

Betrifft: AW: Datensatz löschen
von: Andreas
Geschrieben am: 19.04.2005 14:04:18
Hallo Rainer,
geht immer noch nicht.
Jetzt löscht es mir den Datensatz, in dem nicht dBa steht, wenn dieser im Arbeitsblatt vor dem Datensatz mit dBa kommt.
Gibt es mit VBA eine Möglichkeit, eine Zeile zu suchen, in der in Spalte B eine bestimmte Nummer und in Spalte C dBa steht, und diese Zeile dann zu löschen?
Gruß Andreas
Bild

Betrifft: AW: Datensatz löschen
von: WernerB.
Geschrieben am: 19.04.2005 15:13:41
Hallo Andreas,
wie gefällt Dir das?

Sub Andreas()
Dim Zelle As Range, _
    Mldg As String, Titel As String, Wert As String, fiAd As String, _
    laR As Long, _
    Pruef As Boolean
    Mldg = vbCr & vbCr & vbCr & "Serien-Nr. eingeben:"
    Titel = "Datensatz löschen"
    Wert = InputBox(Mldg, Titel)
    If Wert = "" Then
      MsgBox "Keine Eingabe !" & vbCr & vbCr & "Makro-Abbruch !", 16, _
        "Dezenter Hinweis für " & Application.UserName & ":"
      Exit Sub
    End If
    laR = Worksheets("SerienNr").Cells(Rows.Count, 2).End(xlUp).Row
    With Worksheets("SerienNr").Range("B1:B" & laR)
      Set Zelle = .Find(What:=Wert, After:=Worksheets("SerienNr").Range("B" & laR), LookAt:=xlWhole)
      If Not Zelle Is Nothing Then
        If Zelle.Offset(0, 1).Text = "dBa" Then
          Rows(Zelle.Row).Delete
        Else
          fiAd = Zelle.Address
          Do
            Set Zelle = .FindNext(Zelle)
            If Not Zelle Is Nothing Then
              If Zelle.Address <> fiAd Then
                If Zelle.Offset(0, 1).Text = "dBa" Then
                  Rows(Zelle.Row).Delete
                  MsgBox "Datensatz '" & Wert & "' mit 'dBa' wurde gelöscht !", 64, _
                    "Dezenter Hinweis für " & Application.UserName & ":"
                  Pruef = True
                  Exit Do
                End If
              End If
            End If
          Loop While Not Zelle Is Nothing And Zelle.Address <> fiAd
        End If
        If Pruef = False Then
          MsgBox "Datensatz '" & Wert & "' mit 'dBa' nicht gefunden !", 64, _
            "Dezenter Hinweis für " & Application.UserName & ":"
        End If
      Else
        MsgBox "Datensatz '" & Wert & "' nicht gefunden !", 64, _
          "Dezenter Hinweis für " & Application.UserName & ":"
      End If
    End With
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Bild

Betrifft: AW: Datensatz löschen
von: Andreas
Geschrieben am: 19.04.2005 15:37:12
Hallo Werner,
ist genau das, was ich gesucht habe, funktioniert absolut einwandfrei.
Leider verstehe ich den Code überhaupt nicht.
Könntest du eventuell noch ein paar komentare einfügen, die den Code für mich etwas verständlicher machen?
Wenn du keine Zeit dafür hast, ist auch nicht so schlimm, funktioniert ja einwandfrei.
Das Forum ist absolut Spitze, allen die mir geholfen haben
Vielen Dank
Gruß aus dem Allgäu Andreas.
Bild

Betrifft: AW: Datensatz löschen
von: WernerB.
Geschrieben am: 20.04.2005 08:57:26
Hallo Andreas,
damit die Meldungen auch stimmen, habe ich das Makro entsprechend modifiziert:

Sub Andreas()
Dim Zelle As Range, _
    Mldg As String, Titel As String, Wert As String, fiAd As String, _
    Tx0 As String, Tx1 As String, Tx2 As String, Tx As String, _
    laR As Long, _
    Hinw As Byte
    Mldg = vbCr & vbCr & vbCr & "Serien-Nr. eingeben:"
    Titel = "Datensatz löschen"
    Wert = InputBox(Mldg, Titel)
    If Wert = "" Then
      MsgBox "Keine Eingabe !" & vbCr & vbCr & "Makro-Abbruch !", 16, _
        "Dezenter Hinweis für " & Application.UserName & ":"
      Exit Sub
    End If
    laR = Worksheets("SerienNr").Cells(Rows.Count, 2).End(xlUp).Row
    With Worksheets("SerienNr").Range("B1:B" & laR)
      Set Zelle = .Find(What:=Wert, After:=Worksheets("SerienNr").Range("B" & laR), LookAt:=xlWhole)
      If Not Zelle Is Nothing Then
      'Serien-Nr. wurde gefunden
        If Zelle.Offset(0, 1).Text = "dBa" Then
        'In der Nachbarzelle (Spalte C) steht "dBa"
          Hinw = 1
          Rows(Zelle.Row).Delete
        Else
        'In der Nachbarzelle (Spalte C) steht nicht "dBa"
          Hinw = 2
          fiAd = Zelle.Address
          Do
          'wiederholte Suche wird gestartet (Abbruchbedingungen stehen bei "Loop")
            Set Zelle = .FindNext(Zelle)
            If Not Zelle Is Nothing Then
            'Serien-Nr. wurde gefunden
              If Zelle.Address <> fiAd Then
                If Zelle.Offset(0, 1).Text = "dBa" Then
                'In der Nachbarzelle (Spalte C) steht "dBa"
                  Hinw = 1
                  Rows(Zelle.Row).Delete
                  Exit Do
                End If
              End If
            End If
          Loop While Not Zelle Is Nothing And Zelle.Address <> fiAd
        End If
      End If
    End With
    Tx0 = "Datensatz '" & Wert & "' wurde nicht gefunden !"
    Tx1 = "Datensatz '" & Wert & "' mit 'dBa' wurde gelöscht !"
    Tx2 = "Datensatz '" & Wert & "' mit 'dBa' wurde nicht gefunden !"
    Select Case Hinw
      Case 0
        Tx = Tx0
      Case 1
        Tx = Tx1
      Case 2
        Tx = Tx2
    End Select
    MsgBox Tx, 64, "Dezenter Hinweis für " & Application.UserName & ":"
End Sub

Funktionsweise:
1. Das Makro findet in Spalte B eine Zelle mit der Serien-Nr.:
---1a) in der Nachbarzelle (Spalte C) steht "dBa":
------Reaktion: Zeile wird gelöscht, entsprechende Meldung.
---1b) ) in der Nachbarzelle (Spalte C) steht nicht "dBa":
------Reaktion: wiederholte Suche wird gestartet (bis Treffer bzw. bis Spaltenende).
---------bei Treffer: Zeile wird gelöscht, wiederholte Suche wird beendet, entsprechende Meldung.
---------ohne Treffer bis Spaltenende: entsprechende Meldung.
2. Das Makro findet in Spalte B keine Zelle mit der Serien-Nr.:
---Reaktion: entsprechende Meldung.

Gruß
WernerB.
Bild

Betrifft: AW: Datensatz löschen
von: Andreas
Geschrieben am: 20.04.2005 12:03:54
Hallo Werner,
vielen Dank für den neuen Code und die Erklärungen.
Jetzt komme ich langsam dahinter wie´s funktioniert.
Nochmals vielen Dank für deine Mühe.
Viele grüße aus dem Allgäu
Andreas
 Bild

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