Kombobox Auswahl -> Eintrag in Listbox markiere

Hallo.

steh wieder mal vor einem problem.

ich habe eine kombobox und eine listbox.
in der kombobox stehen die nachnamen der jeweiligen personen der tabelle kontakte. die listbox hat verschiedene spalten z.b.:

  • nachname
  • vorname
  • ort
  • usw.
    (werte auch aus tabelle kontakte)

jetzt wird in der kombobox ein nachname ausgewählt, danach soll der datensatz in der listbox gesucht werden und die zeile farbig markiert werden.

wie geht das??

grüße,
sebastian

Hallo,

wenn der Nachname als „gebundene“ Spalte der Listbox definiert ist, dann gehts ganz einfach mittels: MeineListe = MeineKombo.

Wenn es eine nicht gebundene Spalte ist, muss man in einer Schleife ueber die Listenelement in der entsprechenden Column suchen und mittels MeineListe.Selected(index) = True die Auswahl setzen.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter.

Wenn es eine nicht gebundene Spalte ist, muss man in einer
Schleife ueber die Listenelement in der entsprechenden Column
suchen und mittels MeineListe.Selected(index) = True die
Auswahl setzen.

Dadurch das ich ein ungebundenes Kombinationsfeld habe, habe ich es mit dem MeineListe.Selected(index) = True versucht.

Hier mein Code:

Dim wo As Integer
Dim i As Integer
Dim ListControl As Control

Set ListControl = Forms!frmKontakte!lstKontakte
wo = comboName.Value

For i = 0 To ListControl.ListCount - 1
If ListControl.List(i) = wo Then
 ListControl.SelectedIndex(i) = True
 Exit For
End If
Next i

Jetzt kommt beim Ausführen die Fehlermeldung / Laufzeitfehler 438: Objekt unterstützt Methode oder Eigenschaft nicht -> Zeile For i = 0 To ListControl.ListCount - 1 wird gelb hinterlegt.

Warum erkennt er diese Methode nicht?? in der hilfe wird diese methode auch verwendet, aber ich bekomm immer den Laufzeitfehler 438??
Warum??

Bitte um Hilfe.

Grüße,
Sebastian

Ausgangspunkt: Kombobox und Listenfeld enthalten in der gebundenen Spalte den Nachnamen

Nutze das AfterUpdate-Ereignis des Kombifeldes. Stelle dort ein:
Sub Kombifeld_AfterUpdate()
Me.Listenfeld=Me.Kombifeld
End Sub

Gruß EPa

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo EPa.

Ausgangspunkt: Kombobox und Listenfeld enthalten in der
gebundenen Spalte den Nachnamen

Nutze das AfterUpdate-Ereignis des Kombifeldes. Stelle dort
ein:
Sub Kombifeld_AfterUpdate()
Me.Listenfeld=Me.Kombifeld
End Sub

Habs jetzt auf deine Variante versucht, jedoch ohne erfolg. mein code sieht im mom. so aus:

Private Sub comboName\_AfterUpdate()
Me.lstKontakte = Me.comboName

End Sub

Jedoch kommt die Fehlermeldung:

laufzeitfehler ‚-2147352567 (80020009)‘:
Die von ihnen eingegebene Einstellung ist für diese Eigenschaft nicht zulässig.

was ist da los??

lg,
sebastian

Hi Sebastian!
Übermittel mir doch bitte, wie die Datenherkunft im Kombifeld bzw. im Listenfeld lautet, wieviel Spalten in beiden Felder eingerichtet sind und welche Spaltenummer für die gebundene Spalte vergeben wurde. Außerdem solltest du mir noch die Datentypen angeben.
Gruß EPa

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo EPa.

Übermittel mir doch bitte, wie die Datenherkunft im Kombifeld
bzw. im Listenfeld lautet, wieviel Spalten in beiden Felder
eingerichtet sind und welche Spaltenummer für die gebundene
Spalte vergeben wurde. Außerdem solltest du mir noch die
Datentypen angeben.

Vorab danke für deine nochmalige Antwort.

Also ich kann dir nur sagen, dass die Datenherkunft im Listenfeld mittels VBA bei Form_Load() übergeben wird.
Hier der code dafür:

Dim db As DAO.Database
 Dim rst As DAO.Recordset
 Dim objListitem

 Set db = CurrentDb
 Set rst = db.OpenRecordset("Kontakte", dbOpenSnapshot)

 Do While Not rst.EOF
 Set objListitem = lstKontakte.listitems.Add(, "a" & rst!iId, rst!sName)
 With objListitem
 .listsubitems.Add , , rst!sVorname
 .listsubitems.Add , , rst!Sort
 .listsubitems.Add , , rst!iId
 .listsubitems.Add , , rst!sAdresse
 .listsubitems.Add , , rst!sPLZ
 .listsubitems.Add , , rst!sLand
 .listsubitems.Add , , rst!sTelefon
 .listsubitems.Add , , rst!sEMail
 End With
 rst.MoveNext
 Loop
 rst.Close
 Set rst = Nothing
 Set db = Nothing

Die Datenherkunft für das Kombofeld lautet:
SELECT Kontakte.iId, Kontakte.sName FROM Kontakte ORDER BY [sName];

Spalten für das Listenfeld:
9 Spalten, siehe Code…

Spalten für das Kombofeld:
2 Spalten, siehe SELECT…

Hoffe du weisst jetzt bescheid.

Grüße,
Sebastian

Hallo Sebastian,

warum so kompliziert?

Dim ListControl As Control

Set ListControl = Forms!frmKontakte!lstKontakte

das ist ueberfluessig, denn du kannst direkt auf das Listobjekt zugreifen.

For i = 0 To Forms!frmKontakte!lstKontakte.ListCount - 1

auf die einzelnen Spalten der Listeneintraege kannst du folgendermassen zugreisen:

if wo = Forms!frmKontakte!lstKontakte.Column(intVerwendeteSpalte, i) then

Das sollte eigentlich funktionieren.

Tschau
Peter

Hier mein Code:

Dim wo As Integer
Dim i As Integer
Dim ListControl As Control

Set ListControl = Forms!frmKontakte!lstKontakte
wo = comboName.Value

For i = 0 To ListControl.ListCount - 1
If ListControl.List(i) = wo Then
ListControl.SelectedIndex(i) = True
Exit For
End If
Next i

Jetzt kommt beim Ausführen die Fehlermeldung / Laufzeitfehler
438: Objekt unterstützt Methode oder Eigenschaft nicht ->
Zeile For i = 0 To ListControl.ListCount - 1 wird gelb
hinterlegt.

Warum erkennt er diese Methode nicht?? in der hilfe wird diese
methode auch verwendet, aber ich bekomm immer den
Laufzeitfehler 438??
Warum??

Bitte um Hilfe.

Grüße,
Sebastian

Hallo Sebastian,

dann sollte dein Kombifeld die Spalte 1 in der gebundenen Spalte haben und dein Listenfeld die Spalte 3. Damit verweisen beide Steuelemente auf die ild. Versuch nach dieser Einstellung das von mir genannte AfterUpdate-Ereignis.

Gruß EPa

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter.

Habs jetzt nochmals probiert jedoch wieder die gleiche Fehlermeldung…er erkennt das listcount nicht…

Dim verwendeteSpalte As Integer
Dim wo As Integer
Dim i As Integer
Dim ListControl As Control

verwendeteSpalte = 3
wo = comboName.Value

For i = 0 To Forms!frmKontakte!lstKontakte.ListCount - 1
If (wo = Forms!frmKontakte!lstKontakte.Column(verwendeteSpalte, i)) Then
 ListControl.SelectedIndex(i) = True
 Exit For
End If
Next i

Grüße,
Sebastian

hallo EPa.

dann sollte dein Kombifeld die Spalte 1 in der gebundenen
Spalte haben und dein Listenfeld die Spalte 3. Damit verweisen
beide Steuelemente auf die ild. Versuch nach dieser
Einstellung das von mir genannte AfterUpdate-Ereignis.

habs jetzt nochmals so gemacht…funktioniert immer noch nicht…kommt immer noch die gleiche fehlermeldung.

hab ich da was falsch??

Private Sub comboName\_AfterUpdate()
Me.lstKontakte = Me.comboName
End Sub

grüße,
sebastian

Hi!

Welches Access-Version setzt du eigentlich ein? Den Befehl bzw. die Eigenschaft lstsubitems gibts in Access 2003 z. B. nicht.

Warum füllst du die Eigenschaft Recordsource nicht ebenfalls mit dieser Tabelle Kontakte? (Einfache Select-Anweisung)

Habe auch gerade gesehen, dass du im Listenfeld das Feld iLD mit einem vorangestellten „a“ verknüpfst. Dadurch passt es auch nicht zu dem Kombifeld. Ändere dein Kombifeld auch so, dass das Feld iLD das „a“ vorab erhält.

Gruß EPa

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo EPa.

Welches Access-Version setzt du eigentlich ein?

Ich hab Office XP…

Den Befehl bzw. die Eigenschaft lstsubitems gibts in Access 2003
z. B. nicht.

Warum füllst du die Eigenschaft Recordsource nicht ebenfalls
mit dieser Tabelle Kontakte? (Einfache Select-Anweisung)

kA…bin neu auf dem Gebiet und bin eigentlich nur am experimentieren…

Habe auch gerade gesehen, dass du im Listenfeld das Feld iLD
mit einem vorangestellten „a“ verknüpfst. Dadurch passt es
auch nicht zu dem Kombifeld. Ändere dein Kombifeld auch so,
dass das Feld iLD das „a“ vorab erhält.

jo hab ich gemacht und hat geklappt…danke…für deine vielen antworten…

…das „a“ wars…ich depp!!!

grüße,
sebastian