Excel: Userform mit Combobox um Zeilen zu löschen?
Hallo.
Vielleicht kann mir Neuling ja jemand helfen im VBA Bereich.
Grundlagen sind bekannt, nur brauche ich jetzt im Detail einmal Hilfe...
Ich habe meine Arbeitsmappe. In dieser ist eine Liste in der von mehreren Benutzern Einträge vorgenommen werden können. Zeile für Zeile (von Zeile 1-30/nicht ins unendliche). Jetzt sollen mir aber die ganzen Benutzer nicht meine Formatierungen und "Designs" und Einstellungen zerstören. Mein Blatt ist somit geschützt, bis auf den Bereich, wo geschrieben werden darf.
Jetzt möchte ich eine Userform, die es den Benutzern ermöglicht, ausgewählte Bereiche zu löschen. Also: In Zeile 3 sollen die Zellen B3 bis L3 gelöscht werden.
Auswahl der Zeile aus einer Combobox (1; 2; 3 usw.) --> dann mit einem klick auf löschen, soll die ausgewählte Zeile (Bereich) gelöscht werden.
Hintergrund. Die Funktion Ausschneiden, Einfügen, Kopieren ist in der gesamten Arbeitsmappe blockiert. So soll eben Fusch vermieden werden.
Ich bräuchte jetzt eine Anleitung, wie ich den Code schreiben muss, dass die ausgewählte Zeile in der Combobox durch klick auf einen Befehlsbutton auch gelöscht wird. Und nur diese.
Vielleicht kennt sich von euch ja jemand aus :D oder hat einen besseren Vorschlag.
Vielen Dank schonmal.
So soll es aussehen...
3 Antworten
Hallo
Um dies zu erreichen, können Sie eine benutzerdefinierte Benutzeroberfläche (Userform) erstellen, die eine ComboBox enthält, in der die Benutzer die Zeilennummer auswählen können, die gelöscht werden soll. Sie können dann einen Befehlsknopf hinzufügen, der dem Benutzer ermöglicht, die ausgewählte Zeile zu löschen, indem er darauf klickt.
Um Ihren Code zu schreiben, können Sie die UserForm_Initialize- und die CommandButton1_Click-Ereignisse verwenden. In der UserForm_Initialize-Ereignisprozedur können Sie die ComboBox initialisieren und die Zeilennummern von 1 bis 30 hinzufügen. In der CommandButton1_Click-Ereignisprozedur können Sie den Code schreiben, der die ausgewählte Zeile löscht.
Hier ist ein Beispiel für den Code, den Sie verwenden können:
Private Sub UserForm_Initialize()
' Initialisieren der ComboBox
ComboBox1.Clear
' Hinzufügen der Zeilennummern von 1 bis 30 zur ComboBox
For i = 1 To 30
ComboBox1.AddItem i
Next i
End Sub
Private Sub CommandButton1_Click()
' Speichern der ausgewählten Zeilennummer in einer Variablen
Dim selectedRow As Integer
selectedRow = ComboBox1.Value
' Löschen der ausgewählten Zeile
Range("B" & selectedRow & ":L" & selectedRow).Clear
End Sub
Ich hoffe, dass dies hilft! Wenn Sie weitere Fragen haben oder Hilfe benötigen, lassen Sie es mich wissen.
Ein besserer (einfacherer) Vorschlag wäre, wenn du eine Spalte "Löschkennzeichnung" einfügst, in der die User z.B. ein X in jenen Zeilen eintragen, die gelöscht werden sollen.
Du könntest dann als "Admin" regelmäßig den Schutz aufheben, auf Löschkennzeichnung=X filtern und die Zeilen raushauen.
Diesen Vorgang kannst du auch als Makro schreiben, das mit dem Event "BeforeSave" getriggert wird:
Hier der Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ThisWorkbook.ActiveSheet.Unprotect 'Schutz aufheben
For Z = ThisWorkbook.ActiveSheet.Cells.SpecialCells(xlLastCell).Row To 2 Step -1 'Tabellenende bis Zeile 2
If ThisWorkbook.ActiveSheet.Cells(Z, 1) = "X" Then
ThisWorkbook.ActiveSheet.Rows(Z).Delete 'Zeile löschen, wenn in Spalte 1 "X" steht
End If
Next Z
ThisWorkbook.ActiveSheet.Protect 'Schutz setzen
End Sub

If IsNumeric(ComboBox1.text) then
Dim Zeile
Zeile = Combobox1.Text
Zeile = Worksheetfunction.RoundDown(Zeile,0) 'Für den Fall das eine Kommazahl eingegeben wurde.
Range("A" & Zeile &"XFD" & Zeile).Value = "" 'Dies löschte den Inhalt der Zellen aus
der gewählten Zeile. BEHÄLT aber die Zeile
Range(Zeile & ":" & Zeile).Delete 'Dies löscht die KOMPLETTE Zeile und schiebt
z.B. die Zeile 3->2
else
MsgBox "Bitte eine Zahl eingeben"
End if