Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
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

Listbox leeren + Listbox Ergebnis anhand von Textbox und Kombobox generieren

Listbox leeren + Listbox Ergebnis anhand von Textbox und Kombobox generieren
04.01.2020 18:12:02
Textbox
Hallo zusammen,
ich grübel seit Tagen mit zwei Problemen, bei welchen ich aktuell leider nicht weiterkomme.
Deshalb meine Frage an die Expertenrunde :)
Folgende Vorgehensweise:
Ich habe eine Userform bestehend aus vier Textfeldern, 5 Comboboxen und einer Listbox erstellt.
Sowohl die Textfelder als auch die Comboboxen sind für die Eingabe vorbestimmt und können genutzt werden. Dies geschieht in unterschiedlichen Variationen. Aktuell ist das Makro so aufgebaut,
CommandButton5_Click()
IF Prüfung ob eines der Textfelder oder Comboboxen gefüllt ist, dann
Die Basisdaten ins Array laden. Im Arbeitsspeicher prüfen ob die IF Bedingung gegeben ist,
Falls ja, das neue Array auf einem neuen Arbeitsblatt auswerfen, anschließend als neues Array einlesen
und in der Listbox ausgeben. Aufgrund der Spaltenanzahl > 10 muss ich den Weg über das Array bzw. Rowsource gehen anstelle von Additem.
1. Problem:
Die Suche anhand der Textfelder, auch in Variation, funktioniert.
Die Suche anhand der Combobox (alleinstehend) mit dem Listenindex 1 funktioniert hervorragend.
Bei dem zweiten nicht, obwohl es der exakt selbe Code mit unterschiedlichen Variablen ist? Woran kann das liegen?
2. Problem: Aufgrund des Array bzw. Mehrspaltenproblems funktioniert im Falle einer erneuten Suche das Löschen der Listbox nicht über den Command .clear bzw. Me.Listbox1.clear weshalb ich folgenden Code im Forum gefunden habe:
  With Me.ListBox1
If .ListIndex > -1 Then .RemoveItem (.ListIndex)
End With
Hierbei werden zwar vereinzelte Zeilen gelöscht, stellenweise muss ich aber mehrmals suchen bis sich die Listbox auflöst. Wie kann ich dieses Problem sauber beheben?
3. Problem:
Besteht ein Ansatz, welcher im Falle der Suchbetätigung prüft welche Textfelder bzw. Comboboxen genutzt werden und passt das Makro entsprechend an oder muss ich unzählige Elseif Bedingungen schreiben? ;-)
Herzlichen Dank für eure Hilfe!
Viele Grüße,
Stefan
AW: Listbox leeren + Listbox Ergebnis anhand von Textbox und Kombobox generieren
04.01.2020 18:51:16
Textbox
Hi Stefan,
nur n paar Tipps:
- du hast sehr viele Fragen (eingangs schreibst du von 2 Problemen. Wo kommt denn Problem 3 her?)
- auch, wenn du bestimmt schon einiges selbst gelöst hast, sieht das jetzt von dir Geschriebene aus wie ein Wunsch nach "Auftragsprogrammierung").
Ein Forum ist primär nicht dazu da, Geld zu sparen, sondern den Fragenden in angemessenem Rahmen zu helfen.
- ich würde vorschlagen, pro Beitrag immer nur 1 Frage zu stellen. Wenn diese beantwortet ist, in einem - neuen - Beitrag Frage 2 zu stellen...usw
Ciao
Thorsten
AW: Listbox leeren + Listbox Ergebnis anhand von Textbox und Kombobox generieren
04.01.2020 20:36:19
Textbox
Hi ihr zwei,
sorry, in der Tat es sind etwas mehr verpackte Fehler.. Nehme deinen Ratschlag gerne zur Herzen Thorsten und werde zukünftig nur immer einen Problemfall online stellen.
Damit etwas mehr Klarheit herrscht, hier ein Auszug aus dem Code mit ein paar Anmerkungen,
Public letzteZeileArray As Integer
Private Sub CommandButton5_Click()
Dim vArr As Variant
Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim m As Integer
Dim strT As String
Dim strW As String
Dim k As Integer
Dim vOut As Variant
Dim letzteZeileNeuesArray As Long
Dim letzteSuchZeilenArrayLoeschen As Long
Dim SText As Integer
Dim SText2 As Integer
Dim AB As String
strT = Me.TextBox12.Value
strW = Me.TextBox2.Value
AB = "Erledigen"
With Me.TextBox12.Value
If Len(strT)  0 Then
SText = 1
Else
SText = 0
End If
End With
With Me.TextBox2.Value
If Len(strW)  0 Then
SText2 = 1
Else
SText2 = 0
End If
End With
' ... div. If Pruefungen
''***** 12. Fall     Nur Ein Fall von X
ElseIf Me.ComboBox1.ListIndex = 0 And SText = 0 And SText2 = 0 _
And Me.ComboBox2.ListIndex = 0 And _
Me.ComboBox3.ListIndex = 2 And Me.ComboBox4.ListIndex = 0 And Me.ComboBox5.ListIndex = 0 Then
vArr = wb_TJ.Worksheets("Planung").Range("A2:M" & letzteZeileArray).Value
ReDim vOut(0 To UBound(vArr, 2) - 1, 0 To UBound(vArr, 1) - 1)
For i = 1 To UBound(vArr, 1)
If vArr(i, 6) = AB Then '  Hier werden entsprechend der oberen ElseIf Bedingung die  _
Suchparameter angepasst
For j = 1 To UBound(vArr, 2)
vOut(j - 1, k) = vArr(i, j)
Next j
k = k + 1
End If
Next i
'*** Im Falle einer vorherigen Suche, das ausgewiesene Array auf Tabelle 1 loeschen
letzteSuchZeilenArrayLoeschen = wb_TJ.Worksheets("Tabelle1").Range("A" & Rows.Count).End(xlUp) _
.Row
With wb_TJ.Worksheets("Tabelle1")
For i = letzteSuchZeilenArrayLoeschen to 2 -1
.Rows(i).Delete
Next i
End With
'*** Inhalt der Listbox im Falle von vorheriger Suchen loeschen
With Me.ListBox1
If .ListIndex > -1 Then .RemoveItem (.ListIndex)
End With
'*** Listbox Inhalt aufarbeiten und in Tabelle 1 auswerfen
With Me.ListBox1
If vOut(0, 0)  "" Then  ' Pruefen ob ein Treffer erzeugt wurde
With wb_TJ.Worksheets("Tabelle1")
For z = 1 To k
For s = 1 To UBound(vArr, 2)
.Cells(z + 1, s).Value = vOut(0 + m, 0 + n)
m = m + 1
Next s
m = 0
n = n + 1
Next z
End With
'*** Einlesen des neuen Array aus Tabelle 1 und anzeige in der Listbox1
letzteZeileNeuesArray = wb_TJ.Worksheets("Tabelle1").Range("A" & Rows.Count).End(xlUp). _
Row
.ColumnCount = 13
.ColumnHeads = True
.RowSource = "'[ArbeitsmappeTJ.xlsx]Tabelle1'!A2:M" & letzteZeileNeuesArray
End If
End With
'.. Naechste Bedingung
Bin dankbar über eure Kommentare
Anzeige
AW: Listbox leeren + Listbox Ergebnis anhand von Textbox und Kombobox generieren
04.01.2020 19:15:29
Textbox
Moin!
Ich glaube für deine Frage wäre auch die Datei von Nöten!
zu1.
Das liegt meines erachtens am Code. Den müsste man sehen. Außerdem verstehe ich nicht, was du mit Combobox mit LIstindex 1 meinst. Soll da nur ein Wert drin stehen?
zu 2.
Was meinst du mit .clear geht nicht? Geht es nicht, weil ein Fehler auftritt oder weil dann alle Daten weg sind?
zu3.
Du kannst die Eigenschaft controls der UF durchgehen. Hierbei kannst du prüfen, um was es sich handelt und ob was drin steht. Wenn du die NAmen weißt, kannst du das dabei bei controls mit angeben. bspw.
for i = 1 to 3
if me.controls("Textbox" & i) then machwas
next
Das wertet dir die erten 3 Textboxen (vom Namen die erten ) aus.
VG
Anzeige
AW: Listbox leeren + Listbox Ergebnis anhand von Textbox und Kombobox generieren
05.01.2020 08:40:44
Textbox
Moin Matthias,
einen Ausschnitt vom Code habe ich gestern hochgeladen.
Zu 1.)
Über Listindex der ComboBoxe lese ich aus, welcher Wert genutzt wurde -1 bis x
In meinem Fall funktioniert es mit dem ersten listenindex, hingegen mit dem zweiten nicht.
Erstaunlicherweise funktioniert es aber bei der zweiten ComboBox. Insofern sollte ich das Problem
Schon irgendwie gelöst bekommen.
Zu 2.) korrekt ich erhalte dann immer eine Fehlermeldung, was ich später mal versuchen werde ist, dass im Falle
Eines changeereignisses einer ComboBox die listbox geleert wird. Vielleicht hilft das weiter.
Zu 3.) danke für den Tipp :) ich hatte das bei den Formatierungen bereits genutzt
Viele Grüße,
Stefan
Anzeige
AW: Listbox leeren + Listbox Ergebnis anhand von Textbox und Kombobox generieren
05.01.2020 08:40:46
Textbox
Moin Matthias,
einen Ausschnitt vom Code habe ich gestern hochgeladen.
Zu 1.)
Über Listindex der ComboBoxe lese ich aus, welcher Wert genutzt wurde -1 bis x
In meinem Fall funktioniert es mit dem ersten listenindex, hingegen mit dem zweiten nicht.
Erstaunlicherweise funktioniert es aber bei der zweiten ComboBox. Insofern sollte ich das Problem
Schon irgendwie gelöst bekommen.
Zu 2.) korrekt ich erhalte dann immer eine Fehlermeldung, was ich später mal versuchen werde ist, dass im Falle
Eines changeereignisses einer ComboBox die listbox geleert wird. Vielleicht hilft das weiter.
Zu 3.) danke für den Tipp :) ich hatte das bei den Formatierungen bereits genutzt
Viele Grüße,
Stefan
Anzeige
AW: Listbox leeren + Listbox Ergebnis anhand von Textbox und Kombobox generieren
05.01.2020 12:14:14
Textbox
Moin!
Habe mir den Code mal angeschaut und habe ehrlich gesagt mehr Fragen den Antworten.
1. deine elseif am Anfang eines IF Blocks klappt so nicht. Da kannst du nur mit if beginnen und ggf. beim else Zweige mit elseif eine weitere Prüfung beginnen. AUßerdem erkenne ich keine end if - oder soll der Ganze Code dahinter dann ausgeführt werden?
2. Hast du da wirklich 12 Prüffälle mit jeweils so viel Code. Das kann man bestimmt anders regeln.
3. in der Schleife hier For i = letzteSuchZeilenArrayLoeschen To 2 - 1
löscht du max. 1 Wert. Nämlich nur dann, wenn deine Variable 1 ist. Da fehlt vor der -1 ein Step. So würdest du nur bis 2 -1 also 1 zählen. Weiß nicht, ob das gewollt ist.
4. Für welche Frage ist den der Code? Zur Listbox2 habe ich da jetzt nichts gefunden. Da kann man nichts sagen, woran es gelegen hat. Bzgl. des Löschen in der Listbox verstehe ich das Problem noch nicht ganz. .clear funktioniert ja. Wenn du aber nicht alle sondern nur mehrere löschen willst, dann nutze multiselect in der LIstbox und gehen in der Schleife durch, ob ein Eintrag selektiert wurde. Denn kannst du dann mit remove löschen. Dabei am besten von unten nach oben durchgehen. Geht. bspw.
for i = listbox1.listcount -1 to 0 step -1
if listbox1.selected(i) then listbox1.removitem(i)
next

Ist jetzt nur so aus dem Kopf hingeschrieben, weiß nicht genau ob das fehlerfrei ist.
Ich würde fast vorschlagen, erkläre mal was du genau machen willst, lade deine Datei hoch und dann kann man schauen, ob man es nicht anders lösen kann. Ansonsten bitte nochmal erklären, was der Code machen soll und was er nicht macht. Dann kann man ihn anpassen.
VG
Anzeige
AW: Listbox leeren + Listbox Ergebnis anhand von Textbox und Kombobox generieren
05.01.2020 15:01:21
Textbox
Moin Matthias,
sorry für die Verwirrung ;-) In der Tat der Code ist etwas komplexer und langzeiliger..
1.) Eine erste IF Bedingung existiert ... der Fall war nur ein Ausschnitt von div. ElseIf abzweigungen
2.) In der Tat ja und es werden leider mit zunehmender Anzahl an Comboboxen bzw. Texteingabefeldern immer mehr.
3.) Da war ein Bug, danke für den Hinweis! Habe es nun mit einer Unterfunktion geändert indem ich das Array auslese und die Zeilen dann komplett lösche - funktioniert
4.) Siehe da, durch den neuen Löschvorgang kann ich auch wieder sauber das neue Array einlesen. Insofern säubere ich die Listbox nun wie folgt, 1. Prüfen der IF bzw. elseif Bedingung, 2. Löschen der alten Datensätze auf dem Hilfsblatt, 3. neues Array einlesen bzw. Rowsource (Damit wir die Listbox leer bzw. nur mit den Überschriften angezeigt), neue Suchdatensätze auf Hilfsblatt schreiben, Suchdatensätze mittels Rowsource einlesen
Und zu guter letzt konnte ich auch das Problem mit dem zweiten Listenindex lösen. Lag an einem Eingabefehler in den Daten, deshalb gab es keinen Suchtreffer im Listenfeld. Also alle Probleme gelöst :) Trotzdem Danke für deine Hilfestellung
VG
Anzeige

7 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige