möchte mich erst einmal noch im Nachhinein bei Peter Feustel für den geposteten Code bedanken, funktioniert super!
Allerdings habe ich ein Problem festgestellt. Mit dem Code kann ich die Werte, die ich in die Textbox eingebe, so oft in die Listbox und Tabelle einfügen wie ich möchte. In der Listbox erscheint der Wert jedoch nur einmal (was auch so sein soll), in der Tabelle dagegen erscheint er dann mehrmals. Dort soll er jedoch auch nur einmal aufgeführt werden.
Bei der Auswahl eines Listboxeintrags (der gleichzeitig in der Textbox erscheint) lasse ich mittlerweile den Button, über den Werte hinzufügt werden, sperren. Allerdings weiß ich nicht, wie ich an die Sache herangehen soll, wenn ich etwas in die Textbox eintrage. Gibt es da irgendeine Möglichkeit, wie ich den Inhalt der Textbox mit den Einträgen der Listbox auf Übereinstimmung prüfen und dementsprechend das Hinzufügen dieses Textboxinhalts sperren kann?
Sinn der ganzen Sache ist der, dass die Tabelleninhalte zu einer Gültigkeitsliste gehören und die darf eben keine doppelte, dreifache etc. Werte enthalten.
Folgenden Code habe ich bisher:
Public sSpalte As String
Private Sub CommandButton2_Click()
Dim WkSh As Worksheet
Dim lZeile As Long
sSpalte = [F30]
Set WkSh = Worksheets("Benutzerangaben")
If Me.TextBox25.Value <> "" Then
lZeile = WkSh.Range(sSpalte & "65536").End(xlUp).Row
Range(sSpalte & lZeile + 1).Value = Me.TextBox25.Value
UserForm1.ListBox1.Clear
For lZeile = 2 To WkSh.Range(sSpalte & "65536").End(xlUp).Row
If WorksheetFunction.CountIf(WkSh.Range(sSpalte & "1:" & sSpalte & lZeile), _
WkSh.Range(sSpalte & lZeile)) = 1 Then _
ListBox1.AddItem WkSh.Range(sSpalte & lZeile)
Next lZeile
End If
CommandButton2.Enabled = False
End Sub
Private Sub CommandButton3_Click()
Dim WkSh As Worksheet
Dim lZeile As Long
Dim bGefu As Boolean
sSpalte = [F30]
Set WkSh = Worksheets("Benutzerangaben")
If Me.TextBox25.Value <> "" Then
For lZeile = Range(sSpalte & "65536").End(xlUp).Row To 2 Step -1
If Me.TextBox25.Value = Range(sSpalte & lZeile).Value Then
bGefu = True
Exit For
End If
Next lZeile
End If
If bGefu = True Then
Range(sSpalte & lZeile).Delete Shift:=xlUp ' nur die Zelle löschen
'Rows(lZeile).Delete Shift:=xlUp ' die ganze Zeile löschen
UserForm1.ListBox1.Clear
For lZeile = 2 To WkSh.Range(sSpalte & "65536").End(xlUp).Row
If WorksheetFunction.CountIf(WkSh.Range(sSpalte & "1:" & sSpalte & lZeile), _
WkSh.Range(sSpalte & lZeile)) = 1 Then _
ListBox1.AddItem WkSh.Range(sSpalte & lZeile)
Next lZeile
End If
CommandButton2.Enabled = True
End Sub
Private Sub ListBox1_Click()
Me.TextBox25.Value = UserForm1.ListBox1.List(Me.ListBox1.ListIndex, 0)
CommandButton2.Enabled = False
End Sub
End Sub
Private Sub TextBox25_Change()
If UserForm1.ListBox1.List(Me.ListBox1.ListIndex, 0) = Me.TextBox25.Value Then CommandButton2.Enabled = True
End Sub
Private Sub UserForm_Activate()
Dim WkSh As Worksheet
Dim lZeile As Long
If MultiPage1.Value = 2 Then [F30] = "N"
'If [F30] <> "" Then
sSpalte = [F30]
'End If
Set WkSh = Worksheets("Benutzerangaben")
For lZeile = 2 To WkSh.Range(sSpalte & "65536").End(xlUp).Row
If WorksheetFunction.CountIf(WkSh.Range(sSpalte & "1:" & sSpalte & lZeile), _
WkSh.Cells(lZeile, sSpalte)) = 1 Then _
ListBox1.AddItem WkSh.Cells(lZeile, sSpalte)
Next lZeile
End Sub
Gruß
Kira