Listenfeld durchsuchen geht nicht

  • Access

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Marie123.

    Listenfeld durchsuchen geht nicht

    Hallo,
    ich habe ein Formular mit u.a. einem Listenfeld, wo mehrere Obstsorten aufgeführt werden. Dann habe ich ein Textfeld, wo eine neue Sorte eintragen werden kann. Beim Eintrag in das Textfeld soll überprüft werden, ob die Sorte schon vorhanden ist oder nicht und es soll eine Meldung ausgegeben werden und im Anschluss gespeichert werden (falls diese Sorte noch nicht existiert).

    Ich habe verschiedene Sachen gefunden (ich fange erst an VBA zu lernen), aber irgendwie bekomme ich immer irgendeinen Fehler.
    "Fehler beim Kompilieren" Methode oder Datenobjekt nicht gefunden
    z.B.: ListeSorte.List -> was muss ich an Verweisen oder sonstiges anfügen, damit ich die "List" verwenden kann?
    "Laufzeitfehler 2455" Sie haben einen Ausdruck eingegeben, der einen ungültigen Verweis auf die ItemSelected-Eigenschaft enthältz.B.: For Each varItem In ctlList.ItemsSelected -> warum ?????? Ich bin schon ganz verzweifelt, kann mir bitte jemand sagen, was ich einstellen oder machen muss, damit ich die Sorten in einer Liste durchgehen kann, ohne sie vorher anklicken zu müssen. Mit einem Count war ich schon mal in der Lage, die Anzahl herauszubekommen, das wars dann aber auch schon.Gruß
    Ganz ehrlich: Access-VBA ist eine Grütze. Ich dachte schon, Word-VBA ist eklig. Aber Access toppt es. Habe folgendes zum Laufen gebracht. Ist aber nur deshalb ne Leistung, weil ich in Access nicht arbeite, geschweige denn in Access-VBA. Dein Listenfeld, Deine TextBox und ggf. Dein Button werden sehr wahrscheinlich anders heißen -> entsprechend im unten gezeigten Code die betroffenen Stellen umbenennen.
    btw: Wie bestätigst/beendest Du die TextBox-Eingabe?

    Visual Basic-Quellcode

    1. Option Compare Database
    2. Private Sub Befehl2_Click()
    3. If Text3 = "" Or ItemFoundInInListBox(Text3) Then Text3 = "": Exit Sub
    4. Liste0.AddItem Text3
    5. Text3 = ""
    6. End Sub
    7. Private Function ItemFoundInInListBox(ItemToFind As String) As Boolean
    8. For i = 0 To Liste0.ListCount - 1
    9. If Liste0.ItemData(i) = ItemToFind Then ItemFoundInInListBox = True: Exit Function
    10. Next
    11. ItemFoundInInListBox = False
    12. End Function

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    Hallo VaporiTed,
    vielen Dank für deine Antwort. Und ich dachte schon, ich bin die einzige die das über Access denkt...
    Ich habe es schon so ähnlich hinbekommen, habe da nur ein Problem.
    Nur zum Verständnis, hier wird die Anzahl der Elemente ermittelt, bei mir sind es aktuell 6 Elemente.
    For i = 0 To Liste0.ListCount - 1

    Hier vergleicht er das 1. Element "1" mit dem Inhalt der TextBox, z.B. "Apfel", das 2. Element "2" mit "Apfel" usw.
    If Liste0.ItemData(i) = ItemToFind

    Klar, da kann er auch nix finden. Aber wie kann ich nicht die Anzahl der Elemente, (vielleicht ist das auch die Id) sondern den String also den Namen daraus auslesen wenn ich mit dem Debugger durchgehe? - auch der ist nicht der Knaller, oder ich habe noch nicht verstanden, was man damit alles machen kann.
    Wie kann ich im Debugger in die Eigenschaften von der Liste schauen? Aktuell habe ich nur dieses Me, was auch immer das genau sein soll. Bei Me im Recordset kann ich z.B. die Namen der 3 Spalten von der Tabelle sehen, aber kann leider nicht auf deren Inhalte zugreifen.

    Da ist eine Tabelle hinterlegt, mit Id, Name und timestamp.
    Das überprüfen/hinzufügen geschieht über einen Button.

    Neu

    Ok, da bei mir testweise in der Liste keine Zahlen, sonder "Apfel", "Birne", ... stehen, geht es bei mir.
    Was steht bei Dir drin?
    Me ist normalerweise der Zugriffsbezeichner für das Formular selber.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    Meine Tabelle, die hinter dem Listenfeld liegt:
    Id Name timestamp
    1 Birne Datum + Uhrzeit
    2 Banane Datum + Uhrzeit
    3 Kirschen Datum + Uhrzeit usw.

    Das Listenfeld habe ich auf Spaltenzahl 2 und die Spaltenbreite auf 0cm;4cm. Somit wird mir nur der Name angezeigt. Sorry, hätte es vorher erwähnen müssen :( .

    btw: Ich habe das mit den Obstsorten als Beispiel gewählt, da mein Konstrukt etwas komplexer ist. Ich habe auch 2 Tabellen, aber das Durchsuchen und Event. hinzufügen soll nur in der einen Tabelle passieren. Bzw. klappt das hinzufügen in der anderen Tabelle schon, ich muss halt nur diese Liste auf vorhandene Einträge durchsuchen können. Hatte es schon mit ner Combobox probiert und habe da auch das Problem.