Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1740to1744
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeile im Tabellenblatt löschen

Zeile im Tabellenblatt löschen
02.03.2020 19:51:15
Jörg-Manuel
Hallo lieber Excelgemeinde,
ich versuche mich gerade an einer VBA Programierung. Nun habe ich zwei Probleme, vielleicht kann mir jemand von euch helfen.
In meiner Beispieldatei (https://www.herber.de/bbs/user/135575.xlsm) versuche ich in der Userform2 (Bewohnerdaten) den Gewählten Namen (combobox_name) über den Butten (Bewohner entfernen) im Tabellenblatt (Übersicht) die gesamte Zeile zu entfernen. Ich hoffe das ich mich verständlich ausdrücken konnte.
Nun noch eine Frage. In der Userform1 lese ich eine Listbox ein, schön wäre wenn einen Namen wählt wird das er auch in der Combobox_name erschein.
Herzlich Dank vorab

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile im Tabellenblatt löschen
03.03.2020 12:35:21
fcs
Hallo Joerg,
Im Code des Userform2 musst du folgende Anpassungen machen:
Private Sub CommandButton4_Click()
' Bewohner entfernen
Dim i As Integer
If Me.ComboBox_name.ListCount > 0 Then
If MsgBox("Die markierten Daten werden aus der aktiven Tabelle gelöscht." & vbLf & _
"Wollen Sie fortfahren?", vbYesNo + vbQuestion + vbDefaultButton2, "Achtung!") =  _
vbYes Then
With ThisWorkbook.Worksheets("Übersicht")
For i = 11 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(i, 1) = ComboBox_name.Value Then
.Rows(i).Delete Shift:=xlShiftUp
Exit For
End If
Next i
End With
End If
End If
'usw.

Damit es nicht zu einem Fehler beim Löschen kommt muss in ComboBox_name_Change eine Prüfung eingebaut werden:
Private Sub ComboBox_name_Change()
Dim rngzelle As Range
'neu fcs 2020-03-03 erforderlich damit Löschen eines Eintrags funktioniert
If Me.ComboBox_name.ListIndex = -1 _
Or Me.ComboBox_name.Value = "" Then Exit Sub
'usw.
Im Code von Userform1 muss für die Listbox1 folgendes Ereigismakro ergänzt werden.
Private Sub ListBox1_Click() 'neu fcs 2020-03-03
'Listboxauswahl in Combobox übertragen
If Me.ListBox1.ListIndex  -1 Then
Me.ComboBox1.Value = Me.ListBox1.Value
End If
End Sub

Noch ein paar Hinweise:
  • Verwendung des Namens des Userforms als Objektbezeichner innerhalb des Userform-Codes
    Statt des Namens des Userforms hier besser den Stellvertreter Me verwenden. z.B.:
    Me.ComboBox1.Text = "Bitte Name wählen!"
    statt
    Userform1.ComboBox1.Text = "Bitte Name wählen!"
    

    Dies hat den Vorteil, dass man z.B. den Namen des Userforms ändern kann ohne im Code Änderungen machen zu müssen.

  • With ... End With
    Intensiviere die Verwendung von With ... End With Blöcken. Es macht den Code übersichtlicher und ggf. auch pflegeleichter.

  • Objekt-Variablen für Tabellenblätter
    Es ist oft sinnvoll die im Userform verwendeten Tabellenblätter modulweit zu deklarieren und in der Initialisierungs-Prozedur zu setzen. So muss man im Code aller anderen Makros des Userform-Codes nicht ständig die Blatt-Objekte vollständig angeben, sondern kann die Objektvariable verwenden.

  • unnötige Code-Wiederholungen
    A) zurücksetzen der Werte in den Steuerelementen
    Wenn dies in mehren Makros nötig ist, schreibt man hierfür ein eigenes Makro im Userform. Dieses Makro kann man dann von den anderen Makros bei Bedarf aufrufen.
    B) Suchen nach der Zelle mit dem Namen in der Combobox, inklusive Prüfung vor dem Einlesen/Schreiben von Daten aus dem/in das Tabellenblatt.
    Das muss man nicht X-mal wiederholen sondern es reicht, wenn man es einmal zu Beginn der Anweisungen macht.
    'modifiziert fcs 2020.03-03
    With Worksheets("Übersicht")
    Set rngzelle = .Range("a11:bj114").Find(ComboBox_name.Value, lookat:=xlWhole)
    End With
    If rngzelle Is Nothing Then
    Exit Sub
    End If
    'wohnbereich
    If CB_wohnbereich = "WB1" Then rngzelle.Offset(0, 1) = "WB1"
    If CB_wohnbereich = "WB2" Then rngzelle.Offset(0, 1) = "WB2"
    If CB_wohnbereich = "WB3" Then rngzelle.Offset(0, 1) = "WB3"
    'wohnwelt
    'usw.
    

    statt für jeden Eingabebereich
        'wohnbereich
    With Worksheets("Übersicht")
    Set rngzelle = .Range("a11:bj114").Find(ComboBox_name.Value, lookat:=xlWhole)
    If Not rngzelle Is Nothing Then
    If rngzelle.Offset(0, 1) = "WB1" Then CB_wohnbereich = "WB1"
    If rngzelle.Offset(0, 1) = "WB2" Then CB_wohnbereich = "WB2"
    If rngzelle.Offset(0, 1) = "WB3" Then CB_wohnbereich = "WB3"
    End If
    End With
    'wohnwelt
    


  • Ich hab das mal in deiner Datei in diese Richtung angepasst.
    https://www.herber.de/bbs/user/135587.xlsm
    Tip: wenn du hier eine Beispieldatei hochlädts, dann muss vor und nach dem kopierten Link ein Leerzeichen stehen, damit er funktioniert - am besten den Link in einer separaten Zeile einfügen.
    LG
    Franz
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige