Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Kombinationsfeld: Auslesen der aktivierten Einträge

Begonnen von DerSolide, Januar 15, 2023, 16:52:00

⏪ vorheriges - nächstes ⏩

DerSolide

Hallo und schönen Sonntagabend,

ich möchte aus einem Kombinationsfeld (cboAuswahlfeld) die aktivierten Einträge verketten und in ein Textfeld (txtAuswahlfeld) schreiben, sobald in dem Kombinationsfeld Änderungen vorgenommen werden.

Private Sub cboAuswahlfeld_Change()

  Dim varEintrag As Variant
  Dim strAusgewaehlteEintraege As String
  Dim blnErsterEintrag As Boolean

  strAusgewaehlteEintraege = ""
  If Me!cboAuwahlfeld.ItemsSelected.Count > 0 Then
    blnErsterEintrag = True
    For Each varEintrag In Me!cboAuwahlfeld.ItemsSelected
      If blnErsterEintrag Then
        strAusgewaehlteEintraege = Me!cboAuwahlfeld.ItemData(varEintrag)
        blnErsterEintrag = False
      Else
        strAusgewaehlteEintraege = strAusgewaehlteEintraege & "," & Me!cboAuwahlfeld.ItemData(varEintrag)
      End If
    Next varEintrag
  End If
  Me!txtAuswahlfeld.Value = strAusgewaehlteEintraege
End Sub

Obwohl die Anzahl der ausgewählten Einträge korrekt angezeigt wird (Debug-Mode), wird die FOR ... NEXT- Schleife nicht durchlaufen.

Hat jemand von Euch eine Idee, woran das liegen könnte, denn ich bin jetzt seit knapp 2 Tagen auf der Fehlersuche, habe x-Varianten ausprobiert und mit meinem Latein am Ende.

Vielen Dank im Voraus.

Schöne Grüße,
Christian
  •  

Josef P.

Hallo!

Ist das eine Combobox mit einem MultiValue-Feld?
Dann sollte glaube ich Value ein Array der Auswahl liefern.

Gruß
Josef

DerSolide

Hallo Josef,

ja, ist es.

Danke für den Tipp, allerdings weiss ich nicht, wie ich die Value-Eigenschaft bei den selektierten Einträgen nutzen könnte.
Ein Ersetzen der FOR...NEXT-Schleife (zu Testzwecken) durch eine Schleife der Form
For intI = 0 To Me!cboAuswahlfeld.ItemsSelected - 1
  MsgBox (Me!cboAuswahlfeld.ItemsSelected.Item(intI))
Next intI
liefert lediglich die Positionen der aktivierten Einträge im Kombinationsfeld. Da Item(intI) keine Value-Eigenschaft besitzt, nützt mir das natürlich wenig.

Ich bin für jeden weiteren Tipp dankbar.

Christian
  •  

DerSolide

Konnte das Problem über den Schleifendurchlauf der markierten Einträge in Verbindung mit einer Abfrage über die ID der Referenztabelle lösen.

Schöne Grüße,
Christian
  •  

Josef P.

#4
Hallo!

Zitat... allerdings weiss ich nicht, wie ich die Value-Eigenschaft bei den selektierten Einträgen nutzen könnte.
Luftcode:
strAusgewaehlteEintraege = Join(Me!cboAuswahlfeld.Value, ",")
ZitatKonnte das Problem über den Schleifendurchlauf der markierten Einträge in Verbindung mit einer Abfrage über die ID der Referenztabelle lösen.
Das hast du aber nicht über ItemsSelected der Combobox umgesetzt, oder?

Gruß
Josef

DerSolide

Hallo Josef,

danke für den Luftcode, allerdings bildet der nur einen String aus den nummerischen Verweisen, was mir leider nicht weiterhilft.

Bezüglich Deiner Frage:
Doch, ich habe die Schleife über alle selektierten Einträge laufen lassen und da die dort gespeicherte Position der ausgewählten Einträge identisch (bei einer Korrektur um +1, da ja "Null"-basierend) mit dem Primärschlüssel in der Referenztabelle sind, nach diesem abgefragt.

Ist nicht schön oder elegant, aber es erfüllt seinen Zweck und das ist das Einzige was für mich zählt.

Schöne Grüße,
Christian
  •  

Josef P.

#6
Hallo!

Jetzt fällt es mir erst auf: du reagierst auf das Change-Ereignis und da ist die Combobox noch aufgeklappt. Daher steht ItemsSelected zur Verfügung. Im zusammengeklappten Zustand ist die Listbox-Funktionalität nämlich weg.

Dann sollte auch so etwas funktionieren:
For i = 0 To .ItemsSelected.Count - 1
   Debug.Print i, .ItemsSelected(i), .Column(1, .ItemsSelected(i))
   ' ! Column(0) = Spalte mit Checkbox
Next

eventuell reicht auch das bereits:
strAusgewaehlteEintraege = Me!cboAuswahlfeld.Text
Gruß
Josef