Supportnet Computer
Planet of Tech

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

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.


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

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

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