ich habe vor einiger Zeit eine Frage gestellt und super beantwortet bekommen (von Franz). Leider habe ich nicht die Möglichkeit gefunden den Beitrag direkt zu beantworten oder hervorzuholen.
Es war dieser hier: "ListBox nächsten Wert suchen" von Matthias vom 13.11.2019 09:10:11
Wie gesagt funktioniert die Lösung dort super. Leider kann ich die Datei nicht hochladen, da dort wirklich sehr viele vertrauliche Daten drinstehen und ich hoffe ihr könnt mir so helfen.
Ich habe jetzt die Anforderung, dass ich die Funktion in eine andere Exceldatei überführen möchte. Das hat auch ganz gut geklappt bis auf eine Sache.
In der Suchfunktion, die der alte Beitrag ermöglicht ist ein Option Explicit enthalten, worauf ja dann alle Variablen definiert werden müssen. Dies scheint mir nun aber hinderlich zu sein, da es auch einen anderen Bereich betrifft wo dies anscheinend nicht der Fall ist.
Mein Vorgehen bisher:
Alte Datei mit zwei Tabellenblättern und 4 Userforms in neue Datei integriert (mehrere Blätter und UFs).
Tabellenblätter umbenannt und auch im Code angepasst.
Der Fehler wird an dieser Stelle markiert und tritt beim Speichern der Daten auf.
Do While Wettbewerb1.Cells(lZeile, 1).Value ""
Wettbewerb1 ist markiert und Fehler heißt "Variable nicht definiert"
Das Wettbewerb1 hieß vorher Tabelle1, ist aber wie gesagt alles umbenannt.
Private Sub CommandButton3_Click() 'Speichern Schaltfläche Ereignisroutine
Dim lZeile As Long
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
If ListBox1.ListIndex = -1 Then Exit Sub
'Wir müssen prüfen, ob die ID Spalte auch gefüllt ist!!
If Trim(CStr(TextBoxBundesland.Text)) = "" Then
'Meldung ausgeben
MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
'Abbrechen des Speicherroutine
Exit Sub
End If
'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Wettbewerb1.Cells(lZeile, 1).Value ""
'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListBox1.Column(4) = lZeile Then
'Eintrag gefunden, TextBoxen in die Zellen schreiben
Wettbewerb1.Cells(lZeile, 1).Value = TextBoxBundesland.Text
Wettbewerb1.Cells(lZeile, 2).Value = TextBoxKreis.Text
Wettbewerb1.Cells(lZeile, 3).Value = TextBoxLeistungserbringer.Text
Wettbewerb1.Cells(lZeile, 4).Value = ComboBoxAnbieter.Text
Wettbewerb1.Cells(lZeile, 5).Value = ComboBoxProdukt.Text
Wettbewerb1.Cells(lZeile, 6).Value = TextBoxRettungsmittel.Text
Wettbewerb1.Cells(lZeile, 7).Value = TextBoxDatumEinfuehrung.Text
Wettbewerb1.Cells(lZeile, 8).Value = TextBoxDatumNutzung.Text
Wettbewerb1.Cells(lZeile, 9).Value = TextBoxDatumStand.Text
Wettbewerb1.Cells(lZeile, 10).Value = TextBoxKommentarfeld.Text
Call Sortieren 'Sortieren des Tabellenblattes
Call Wettbewerb 'Aktualisieren der ListBox
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
ListBox1.ListIndex = Listind
Call AnzahlAnbieter
End Sub
Die Suchfunktion sieht so aus und das Option Explicit ist wahrscheinlich das Problem:
Option Explicit
Private arrSelected() As Boolean 'Array mit True/False für Treffer/nicht Treffer in Zeilen
Private Z As Long 'aktueller Treffer-Index im Array
Dim Listind As Integer
Option Compare Text
Private Sub UserForm_Activate()
Me.Top = main.Top + 0
Me.Left = main.Left + 154
End Sub
Private Sub Suche()
Dim i As Integer, ii As Integer
Dim vntList, strTxt As String
strTxt = LCase(TextBoxSuche)
vntList = ListBox1.List
ReDim arrSelected(0 To ListBox1.ListCount - 1)
Z = -1
If strTxt "" Then
For i = 0 To ListBox1.ListCount - 1
For ii = 0 To ListBox1.ColumnCount - 1
arrSelected(i) = InStr(LCase(vntList(i, ii)), strTxt) > 0
If arrSelected(i) = True Then
If Z = -1 Then Z = i '1. Treffer merken
Exit For
End If
Next
Next
End If
With ListBox1
.ListIndex = Z '1. Treffer markieren
End With
End Sub
Private Sub SucheWeiter()
If Z = -1 Then Exit Sub
Do
Z = Z + 1
If Z > UBound(arrSelected) Then Z = 0
If arrSelected(Z) = True Then
Me.ListBox1.ListIndex = Z
Exit Do
End If
Loop
End Sub
Private Sub SucheZurueck()
If Z = -1 Then Exit Sub
Do
Z = Z - 1
If Z = -1 Then Z = UBound(arrSelected)
If arrSelected(Z) = True Then
Me.ListBox1.ListIndex = Z
Exit Do
End If
Loop
End Sub
'Für den Rückwärtssuchbutton
Private Sub CommandButtonBackward_Click()
If Z = -1 Then
KeinTreffer.Show
Else
Call SucheZurueck
End If
End Sub
'Für den Weitersuchbutton
Private Sub CommandButtonForward_Click()
If Z = -1 Then
KeinTreffer.Show
Else
Call SucheWeiter
End If
End Sub
Private Sub TextBoxSuche_Change()
If ListBox1.ListCount = 0 Then
Hinweis.Show
Else
Call Suche
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode 1 Then
Cancel = 1
End If
End Sub
Vielen Dank für eure Unterstützung.