Supportnet / Forum / Datenbanken
MS Access Mehrfachauswahl aus einem Listenfeld in einer Abfrage verwenden
Frage
Hallo,
ich habe folgendes Problem in MS Access:
In einem Formular gibt es ein Listenfeld, aus dem der Benutzer die Möglichkeit hat, Länder auszuwählen (Mehrfachauswahl).
Aufgrund dieser Auswahl soll eine Abfrage gestartet werden, die aufgrund der Mehrfachauswahl alle Daten ausgeben soll.
Wie funktioniert das? Wie krieg ich die Mehrfachauswahl in die Abfrage?
Info:
Die Liste beinhaltet Länderbezeichnungen und die LänderID.
In der Tabelle stehen weitere Daten zu diesen Ländern.
Der Benutzer wählt aus der Liste mehrere Länder aus (Mehrfachauswahl) und klickt dann auf einen Button.
Ergebnis : Die ausgewählten Länder + Zusatzinfos
Kann mir jemand helfen???
Gruß
Semra
Antwort 1 von Teddy7
suche1 = " "
If Not IsNull(SLand.Column(0)) Then
´Anzahl der ausgewählten Zeilen feststellen
n = SLand.ListCount - 1
´Zeilen durchlaufen und Werte der ersten Spalte in kommagetrennte Zeichenfolge schreiben
For i = 0 To n
If SLand.Selected(i) Then
If suche1 = " " Then
suche1 = "´" & SLand.Column(0, i) & "´"
Else
suche1 = suche1 & "," & "´" & SLand.Column(0, i) & "´"
End If
End If
Next i
If suche1 <> " " Then
suche1 = "Land in (" & suche1 & ")"
End If
End If
Diese Variable - zusammen mit anderen Selektionsmöglichkeiten - wird dann beim Öffnen eines Endlosformulars(Übersicht) oder eines Berichts mitgegeben.
Gruß
Teddy
If Not IsNull(SLand.Column(0)) Then
´Anzahl der ausgewählten Zeilen feststellen
n = SLand.ListCount - 1
´Zeilen durchlaufen und Werte der ersten Spalte in kommagetrennte Zeichenfolge schreiben
For i = 0 To n
If SLand.Selected(i) Then
If suche1 = " " Then
suche1 = "´" & SLand.Column(0, i) & "´"
Else
suche1 = suche1 & "," & "´" & SLand.Column(0, i) & "´"
End If
End If
Next i
If suche1 <> " " Then
suche1 = "Land in (" & suche1 & ")"
End If
End If
Diese Variable - zusammen mit anderen Selektionsmöglichkeiten - wird dann beim Öffnen eines Endlosformulars(Übersicht) oder eines Berichts mitgegeben.
Gruß
Teddy
Antwort 2 von semra
Hi Teddy,
danke für deine Antwort.
Aber ich hab nicht so ganz verstanden, wie das funktionieren soll. Bin auch nicht wirklich ein VBA-Kenner. Bin gerade dabei es zu lernen. Ich habe nun folgende Prozedur geschrieben, die die globale Variable "kriterium" ermittelt.
Jetzt will ich, dass mir die Funktion, diese Variable zurückgibt, damit in der Abfrage nach diesem Kriterium (also die gewählten Länder) gesucht werden kann. Die Abfrage liefert mir dann Daten, die ich für eine weitere Abfrage benötige.
Gibt es in VBA irgendein Ausdruck wie Return (variable) o.ä.?
Es muss doch eine Möglichkeit geben, um von der Abfrage aus die Variable anzusprechen, oder?
Kannst du mir da helfen?
Gruß
Semra
danke für deine Antwort.
Aber ich hab nicht so ganz verstanden, wie das funktionieren soll. Bin auch nicht wirklich ein VBA-Kenner. Bin gerade dabei es zu lernen. Ich habe nun folgende Prozedur geschrieben, die die globale Variable "kriterium" ermittelt.
Option Compare Database
Dim kriterium As String
Public Function getSelectedListItems() As String
Dim liste As Control
Dim i As Integer
Dim var As Variant
´String ermitteln
kriterium = ""
kriterium = "Wie "
Set liste = Forms!F_Ausstattung_Vergleichen!ListeLand
For Each var In liste.ItemsSelected
i = i + 1
Next
Debug.Print (i)
i = i - 1
For Each var In liste.ItemsSelected
kriterium = kriterium & "´" & liste.ItemData(var) & "´"
If i <> 0 Then
kriterium = kriterium & " Oder "
End If
i = i - 1
Next
Debug.Print (kriterium)
End Function
Jetzt will ich, dass mir die Funktion, diese Variable zurückgibt, damit in der Abfrage nach diesem Kriterium (also die gewählten Länder) gesucht werden kann. Die Abfrage liefert mir dann Daten, die ich für eine weitere Abfrage benötige.
Gibt es in VBA irgendein Ausdruck wie Return (variable) o.ä.?
Es muss doch eine Möglichkeit geben, um von der Abfrage aus die Variable anzusprechen, oder?
Kannst du mir da helfen?
Gruß
Semra
Antwort 3 von Teddy7
Entweder Du machst eine echte globale Variable - die wird im Modul1 definiert als
Public kriterium as string
Oder - und das ist das einfachere - Du übergibst das Kriterium in der function zurück.
Dazu mußt Du nur vor end function einfügen
getSelectedListItems = kriterium
Dann kannst Du irgendwo in einem Formular eingeben
dim xkriterium as string
xkriteriterium = getSelectedListItems()
///////////
Eigentlich ist das aber völliger Quatsch. Eine Function macht man nur dann, wenn man die Funktion von mehreren Stellen aus aufrufen will.
In diesem Fall sollte es ein Selektions-Formular geben, in dem alle gewünschten Kriterien eingegeben werden können. Dann wird üblicherweise über einen Befehlsbutton ein Übersichtsbild oder ein Bericht aufgerufen, in dem die Treffer zu sehen sind.
Die Kriterien werden also im klick-Ereignis des Befehlsbuttons zusammengestellt..
Gruß
Teddy
Public kriterium as string
Oder - und das ist das einfachere - Du übergibst das Kriterium in der function zurück.
Dazu mußt Du nur vor end function einfügen
getSelectedListItems = kriterium
Dann kannst Du irgendwo in einem Formular eingeben
dim xkriterium as string
xkriteriterium = getSelectedListItems()
///////////
Eigentlich ist das aber völliger Quatsch. Eine Function macht man nur dann, wenn man die Funktion von mehreren Stellen aus aufrufen will.
In diesem Fall sollte es ein Selektions-Formular geben, in dem alle gewünschten Kriterien eingegeben werden können. Dann wird üblicherweise über einen Befehlsbutton ein Übersichtsbild oder ein Bericht aufgerufen, in dem die Treffer zu sehen sind.
Die Kriterien werden also im klick-Ereignis des Befehlsbuttons zusammengestellt..
Gruß
Teddy
Antwort 4 von semra
Hallo Teddy,
nun habe ich es so einigermaßen begriffen was du meinst. Habe deinen Code in das Click()-Ereignis des Suchen-Buttons geschrieben. Aber wo kommt nun das Select?
In deinem Code wird ja die Unterabfrage generiert. Danach muss ja irgendwie ein Select kommen:
Select * from Daten where suche1????
Wie bau ich die Variable suche1 da ein?
Und wie wird der Select-Befehl dann ausgeführt?
Sorry, aber bisher habe ich immer nur mit der Abfrage-Oberfläche gearbeitet und dann einen Bericht mit Datenherkunft aus der Abfrage erstellt.
Kannst du mir helfen?
Gruß
Semra
nun habe ich es so einigermaßen begriffen was du meinst. Habe deinen Code in das Click()-Ereignis des Suchen-Buttons geschrieben. Aber wo kommt nun das Select?
In deinem Code wird ja die Unterabfrage generiert. Danach muss ja irgendwie ein Select kommen:
Select * from Daten where suche1????
Wie bau ich die Variable suche1 da ein?
Und wie wird der Select-Befehl dann ausgeführt?
Sorry, aber bisher habe ich immer nur mit der Abfrage-Oberfläche gearbeitet und dann einen Bericht mit Datenherkunft aus der Abfrage erstellt.
Kannst du mir helfen?
Gruß
Semra
Antwort 5 von Teddy7
Beim Öffnen des Berichts (oder eines Endlosformulars) wird dieses Kriterium übergeben. Die Datenquelle des Berichts wird dann automatisch dadurch eingeschränkt. Deshalb müssen im Kriterium die Feldnamen der Datenquelle des Berichts verwendet werden.
Das sieht dann so aus:
dim suche as string
.....
.....suche zusammenbauen.....
DoCmd.OpenReport "repUmsatz", acViewPreview, , suche
Gruß
Teddy
Das sieht dann so aus:
dim suche as string
.....
.....suche zusammenbauen.....
DoCmd.OpenReport "repUmsatz", acViewPreview, , suche
Gruß
Teddy

