Von Listenfeld automatisch in Textfeld übertragen

  • Access

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Libelle123.

    Von Listenfeld automatisch in Textfeld übertragen

    Hallo zusammen,

    Ich bin ziemlich unerfahren in Access und VBA und habe mich soeben erst hier registriert. Erstelle gerade ein Formular
    Ich würde gern den Inhalt von einem Listenfeld in ein Textfeld übertragen, nachdem ich ein Kontrollkästchen aktiviert habe. Das Listenfeld wird davor gefiltert.

    Wie gesagt ich bin nicht sehr gut und erfahren im Programmieren aber so etwas in der Richtung habe ich es mir vorgestellt.

    VB.NET-Quellcode

    1. IF KK = true then
    2. Me!Textfeld = Me!Listenfeld(Column (1) & ", " Column (2))
    3. End if

    Ist bestimmt der falsche Ansatz, aber mir fällt nichts besseres ein. Hoffe mal das bei Access auch vb.net verwendet wird und nicht vb6 und ich den richtigen Code verwendet habe :saint:

    Gruß und danke im vorraus!

    Libelle123 schrieb:

    Hoffe mal das bei Access auch vb.net verwendet wird und nicht vb6
    Weder, noch.
    Es wird VBA verwendet. Und das ist näher an VB6 als an VB.Net.

    Libelle123 schrieb:

    Me!Textfeld = Me!Listenfeld(Column (1) & ", " Column (2))
    Versuchs mal syntaktisch so

    Visual Basic-Quellcode

    1. ​Textfeld = Liste.Column(1) & ", " & Liste.Column(2)
    Du musst halt für Textfeld und für Liste die richtigen Namen eintragen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo petaod,

    Danke für deine Antwort :)
    Ich habe es mal so wie du gesagt hast probiert, aber es passiert weiterhin gar nichts leider. Wenn ich das KK aktiviere oder auch nicht, macht kein unterschied.

    Quellcode

    1. Private Sub Kontrollkästchen8_Click()
    2. If Kontrtollkästchen8 = True Then
    3. Text6 = Liste4.Column(1) & ", " & Liste4.Column(2)
    4. End If
    5. End Sub


    Gruß
    Dann setz einen Breakpoint in Zeile 2 und beobachte im Einzelschrittverfahren die Variablen.

    Und da Kontrollkästchen8 ein Objekt zu sein scheint, solltest du besser mit dessen Value-Property arbeiten.
    If Kontrollkästchen8.Value Then

    Die Nomenklatur mit den Umlauten gefällt mir übrigens nicht.
    Da könntest du ggf. in internationalen Umgebungen Schwierigkeiten bekommen, wenn die Datei von deinem amerikanischen oder japanischen Kollegen bearbeitet werden soll.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Habe es so mal probiert. Bekomme "Laufzeitfehler 424 Objekt erforderlich" bei der Zeile mit If.

    Quellcode

    1. Private Sub Kontrollkästchen8_Click()
    2. If Kontrtollkästchen8.Value Then
    3. Text6 = Liste4.Column(1) & ", " & Liste4.Column(2)
    4. End If
    5. End Sub


    Habe mit dem Breakpoint noch nie gearbeitet daher weiß ich nicht ob ich ihn richtig angewendet habe. Bei dem Code mit Value erscheint immer der Laufzeitfehler 424 in der if Zeile und kann da irgendwie nicht überspringen mit F8.
    Bei meinem alten Code erscheint kein Fehler. Aber ich würde sagen er überspringt diese Zeile

    Quellcode

    1. Text6 = Liste4.Column(1) & ", " & Liste4.Column(2)

    Zumindest wird sie nicht gelb markiert sonderen die darunter, nachdem bei dem Breakpoint angehalten wird.

    Die Nomenklatur mit den Umlauten gefällt mir übrigens nicht.
    Ich weiß. Ist gerade in einer Textdatenbank zum rumspielen und probieren. In der Finalen Version benenne ich sie um ;)

    Gruß

    Libelle123 schrieb:

    Kontrtollkästchen8.Value
    Auch nicht wenn du es korrekt schreibst? Kontrtollkästchen8<>Kontrollkästchen8

    Ansonsten: Welchen Datentyp hat Kontrollkästchen?
    Notfalls mal nachschauen, welche Properties das Objekt besitzt.

    Libelle123 schrieb:

    Habe mit dem Breakpoint noch nie gearbeitet
    Dann wird's aber höchste Zeit, dich mit dem Debugger zu beschäftigen.
    Das ist das wichtigste Handwerkszeug für den Programmierer.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Auch nicht wenn du es korrekt schreibst?

    Das erklärt natürlich einiges... Ist mir echt nicht aufgefallen. Vielen Dank für den Hinweis :thumbup: . Manchmal sieht man den Wald vor lauter Bäumen nicht.

    Jetzt schreibt es zumindest mal die markierte Zeile in das Textfeld :thumbsup: . Ist es auch möglich, das so alle Zeilen vom Listenfeld übernommen werden? Also das gesamte Listenfeld per Kontrollkästchen in ein Textfeld übertragen werden kann. Vermute mal, dass das irgendwie über List.Count und eine Schleife funktioniert aber da hörts bei mir auch schon auf mit meinen Programmierkenntnissen.

    Dann wird's aber höchste Zeit, dich mit dem Debugger zu beschäftigen.

    Danke das werde ich auf alle Fälle machen

    Gruß und Danke für den Hinweis

    Libelle123 schrieb:

    Das erklärt natürlich einiges... Ist mir echt nicht aufgefallen
    Dem Compiler wäre es aufgefalllen, wenn du ​Option Explicit im Modulkopf stehen hättest.

    Libelle123 schrieb:

    Vermute mal, dass das irgendwie über List.Count und eine Schleife
    Ansatz:

    Visual Basic-Quellcode

    1. ​For Each Element in List
    2. '...
    3. Next

    docs.microsoft.com/de-de/offic…lp/for-eachnext-statement
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Was wäre bei mir das Element?
    Wenn ich die Funktion richtig verstehe könnte ich da z.B. nach Wörtern suchen die in der Liste vorkommen. Aber das brauche ich ja nicht so direkt.

    Hab das mal so in diese Richtung versucht aber bekomme stänig irgendwelche Fehler ausgegeben.

    Quellcode

    1. Private Sub Kontrollkästchen8_Click()
    2. Dim I As Variant
    3. For Each I In Liste4
    4. If Kontrollkästchen8.Value Then
    5. Text6 = Liste4.Column(0) & ", " & Liste4.Column(1)
    6. Exit For
    7. End If
    8. Next I
    9. End Sub


    Laufzeit 438 Objekt unterstützt Eigenschaft oder Methode nicht.

    Dem Compiler wäre es aufgefalllen, wenn du Option Explicit im Modulkopf stehen hättest

    Werde ich mal ausprobieren!

    Gruß und Danke für die Hilfe!
    Hallo
    Habe es nun weiter versucht und gegooglt und schaffe es inzwischen das gesamte Listenfeld zu markieren, bzw. wieder zu entmarkieren.

    Quellcode

    1. Private Sub Form_Load()
    2. Befehl11_Click
    3. End Sub
    4. Private Sub Befehl11_Click()
    5. Dim I As Long
    6. For I = 0 To Me!Liste4.ListCount
    7. Me!Liste4.Selected(I) = True
    8. Next
    9. End Sub
    10. Private Sub Befehl13_Click()
    11. Dim I As Long
    12. For I = 0 To Me!Liste4.ListCount
    13. Me!Liste4.Selected(I) = False
    14. Next
    15. End Sub

    Ich glaube damit bin ich schon mal einen Schritt weiter und gefühlt auf der richtigen Spur.

    Habe weiterhin das Problem, das ich das ausgewählte Listenfeld nicht im ganzen in ein TExtfeld übertragen bekomme

    Quellcode

    1. Private Sub Kontrollkästchen8_Click()
    2. Dim Itm
    3. For Each Itm In Me!Liste4.itemSelected '//Fehler
    4. If Kontrollkästchen8.Value Then
    5. Text6 = Liste4.Column(0) & ", " & Liste4.Column(1)
    6. End If
    7. Next Itm
    8. End Sub


    Habe in der For Each Zeile Fehler 438 Objekt unterstützt diese Eigenschaft oder Methode nicht
    Weiß nicht was ich da falsch mache bzw. wie es richtig heißen müsste um die Funktion zum laufen zu bringen

    Gruß
    Habe es hinbekommen :D :D :D
    Beim betätigen eines Befehlbuttons werden alle Datensätze der Liste Markiert und dananch direkt in ein Textfeld übernommen. Wenn man will, das die beiden Aktionen nicht nacheinander ablaufen, dem unteren Code einfach einfach einem seperatem Befehl zuweisen.

    Quellcode

    1. Private Sub BefehlÜbernehmen_Click()
    2. Dim I As Long '//Listenfeld markieren
    3. For I = 0 To Me!ListAuswahl.ListCount
    4. Me!ListAuswahl.Selected(I) = True
    5. Next
    6. Dim varItem As Variant '// Von Listenfeld in Textfeld schreiben
    7. Dim strName As String
    8. If IsNull(Me.TxtAuswahl.Value) Then
    9. strName = ""
    10. Else
    11. strName = Me.TxtAuswahl.Value
    12. End If
    13. For Each varItem In Me.ListAuswahl.ItemsSelected
    14. strName = strName & Me.ListAuswahl.Column(1, varItem) & ", "
    15. strName = strName & Me.ListAuswahl.Column(2, varItem) & ", "
    16. strName = strName & Me.ListAuswahl.Column(3, varItem) & vbCrLf
    17. Next varItem
    18. strName = Left(strName, Len(strName) - 0)
    19. Me.TxtAuswahl.Value = strName
    20. End Sub


    Wichtig ist die Mehrfachauswahl vom Listenfeld zuzulassen, weil sonst wird immer nur der letzte Datensatz der Liste übernommen!

    Gruß und Danke für die Hilfe!!! :thumbsup: