PDA

Vollständige Version anzeigen : Listenfeld


Juergen65
29.10.2011, 11:32
Hallo zusammen
Ich bin mal wieder auf eure Hilfe angewiesen. In einem Formular
habe ich ein Listenfeld was mir Datensätze aus einem Vorgewähltem Jahr anzeigt.

Ein zweites Listenfeld was leer ist, soll ausgewählte Daten aus dem ersten Listenfeld übernehmen, und nur diese ausgewälten Datensätze Drucken.

Frage: Wie kann ich dies am einfachsten lösen. Bin leider noch anfänger in VBA.

Schöne Grüsse
Jürgen
:rolleyes:

Storch
29.10.2011, 12:05
Hallo, was heisst 'das Listenfeld soll Daten DRUCKEN?'

Juergen65
29.10.2011, 12:23
Hallo Uwe
Hinter dem ersten Listenfeld werden die Daten über eine Abfrage angezeigt.
Nun Habe ich mir ein zweites Listenfeld erstellt was leer ist.
Durch das anklicken der Datensätze aus dem ersten Listenfeld, möchte ich die ausgewählten Datensätze im zweiten Listenfeld anzeigen lassen.

Diese ausgewählten Datensätze vom zweiten Listenfeld, möchte ich einen Bericht übergeben und ausdrucken.

Hintergrund nicht alle Datensätze vom ersten Listenfeld sollen gedruckt werden, nur die welche der Benutzer ausgewählt hat.

Ist das überhaupt möglich ???

Danke u. Gruß
Jürgen:o :o

ebs17
29.10.2011, 12:43
Du könntest Dir ein Listenfeld mit Mehrfachauswahl näher ansehen. Die Auswahl daraus kannst Du an das zweite Listenfeld übergeben oder gleich an die Datenherkunft des Berichts.

Storch
29.10.2011, 13:22
Hallo Jürgen,

als Hilfe auch zu Eberhards Denkanstoß mal folgenden Codeschnipsel:
Dim intCount As Integer, i As Integer, lvValue As Variant
'Zählschleife von 0 beginnend bis zur Anzahl vorhandener Einträge
'..ListCount -1 weil: ListCount = 0-basiert. d.h. zb 3 Einträge hätten die Indexe 0,1 und 2
'..ListCount würde aber eine 3 zurück geben dadurch würde die Schleife ohne Abzug von 1
'bei 0 beginnend bis 3 laufen, dann wären es aber 4 Einträge,der letzte wird ien NULL-Wert und das wolln wir ja nich
For i = 0 To Me!Liste2.ListCount - 1
'Prüfen ob der aktuelle Eintrag ausgewählt ist
If Me!Liste2.Selected(i) Then
'wenn ja dann rekursive Verkettung im lvValue
lvValue = lvValue & Me!Liste2.ItemData(i)
End If
Next
Debug.Print lvValue

Die Rekursive Verkettung in 'lvValue' ist jetzt nur ein einfaches Beispiel, um darzustellen, wie man die Daten aus deinem ersten Listenfeld rausbekommt. An dieser Stelle sollte sich eine SQL-Anweisung basteln lassen, mit der man das 2. Listenfeld oder einen Bericht füttert.

Für mehr fehlt mir gerade die Zeit aber es sind ja noch andere Helferlein da. :)

Marsu65
29.10.2011, 17:32
Hallo Jürgen
Bin leider noch anfänger in VBA.

Dann wäre es vlt. einfacher die erste Liste als Endlos(unter)formular darzustellen und auf die zweite ganz zu verzichten.
In der entspr. Tabelle ein Ja/Nein-Feld DRUCKEN einfügen und im Formular mit anzeigen.
Dann kannst du im (Unter-)Formular direkt deine Datensätze auswählen und
der Bericht könnte sich die Daten (alle, bei denen DRUCKEN auf Ja steht) per Abfrage laden.
Damit brauchst du bis auf den Berichtsaufruf und das Zurücksetzen der Druckauswahleinträge auf Nein (nach erfolgtem Druck) kein VBA.

Hinweis: Dieser einfache Weg eignet sich nicht für eine Mehrbenutzeranwendung, bei der mehrere User gleichzeitig eine Druckauswahl treffen ;)

Juergen65
30.10.2011, 07:42
Hallo zusammen

Danke für eure Tipps, bin gerade dabei den Vorschlag von Eberhard umzusetzen.

Schöne Grüsse aus dem Münsterland

Jürgen
:) :)

Juergen65
31.10.2011, 08:44
Hallo zusammen

Für alle die auch nur bestimmte Datensätze eines Listenfeldes Drucken wollen. Ich habe es nach Eberhard seinen Vorschlag mit der Mehrfachauswahl gelöst. Nachfolgenden Code, habe ich hinter einer Schaltfläche gelegt.

'Mehrfachauswahl Drucken
Private Sub btnOpenReport_Click()
Dim strFilter As String, varElement As Variant
Const cstrField = "IdNrTier"

If Me.Liste47.ItemsSelected.count = 0 Then
Beep
Exit Sub
End If

strFilter = ""
For Each varElement In Me.Liste47.ItemsSelected
If strFilter <> "" Then '" or " Anhaengen
strFilter = strFilter + " or "
End If
strFilter = strFilter & "[" & cstrField & "] = " & _
Me.Liste47.ItemData(varElement)

Next
DoCmd.OpenReport "rpt_Test", _
acViewPreview, , strFilter


End Sub


Schöne Grüsse
Jürgen
:) :)

ebs17
31.10.2011, 09:35
Hinweis:
Statt eines Filters <tt>"IdNrTier = 2 OR IdNrTier = 5 OR IdNrTier = 7"</tt> könntest Du auch einen solchen erzeugen:
IdNrTier IN (2,5,7)