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