Avatar billede Bjørn Mester
27. september 2020 - 15:13 Der er 13 kommentarer og
1 løsning

Combobox med flere værdier i Formular

Hej

Jeg har en database med medlemmer fra flere klubber.
På oversigtsformularen har jeg så diverse udskrifter inden for et datointerval man taster ind på oversigtsformularen f.eks. de 5 bedste inden for en kategori.
På denne formular er en kombobox hvor man vælger f.eks. klub A og udskrifterne vedrører så kun klub A. Man kan selvf. vælge klub B og så er det naturligvis kun klub B.
Men jeg vil gerne at man kunne vælge flere klubber, således at man f.eks. får de 5 bedste samlet set hvad enten det er klub A eller B.

Mvh.
Bjørn
Avatar billede terry Ekspert
27. september 2020 - 15:47 #1
perhaps you should concider using a multi select listbox
Avatar billede Bjørn Mester
27. september 2020 - 16:42 #2
Hi Terry

Nu har jeg prøvet at lægge den ind på formularen og jeg kan godt vælge klub A og B, men forespørgslen er tom.?
Kriteriet i forespørgslen var før: Like [Formularer]![Oversigt]![Klubnavn_cbo] og det virkede fint.
Kriteriet er nu: Like [Formularer]![Oversigt]![Liste52]
Forespørgslen er tom uanset et eller flere valg.

Mvh.
Bjørn
Avatar billede terry Ekspert
27. september 2020 - 17:16 #3
When you select an item from a combo it gets placed in the textbox part of the combo, and this is what you refer to in the query.

When you use a listbox you cant do that and I'm afraid it will require some VBA to work with a listbox.
Avatar billede terry Ekspert
27. september 2020 - 17:19 #4
I dont know if you have VBA skills but if you do then take a look at this

http://allenbrowne.com/ser-50.html
Avatar billede Bjørn Mester
27. september 2020 - 20:10 #5
Hi
Mine evner i VBA er ikke særligt store, men jeg ser lige på det og vender tilbage.
Mvh.
Bjørn
Avatar billede terry Ekspert
27. september 2020 - 22:41 #6
If you need some help you can maybe send me an example of your database and I'lll modify it to use a listbox.
ekspertenATsanthell.dk
AT = @
Avatar billede bsn Forsker
28. september 2020 - 09:23 #7
Et lille eks. ud fra terry #4 link...

Me.Liste4 er din liste på formularen...

Private Sub cmdListeValg_Click()
    'Purpose:  Open the report filtered to the items selected in the list box.
    'Author:  Allen J Browne, 2004.  http://allenbrowne.com
    Dim varItem As Variant      'Selected items
    Dim strWhere As String      'String to use as WhereCondition
    Dim strDelim As String      'Delimiter for this field type

    'Loop through the ItemsSelected in the list box
    With Me.Liste4
        For Each varItem In .ItemsSelected
            If Not IsNull(varItem) Then
                strWhere = strWhere & strDelim & .ItemData(varItem) & strDelim & ","
            End If
        Next
        MsgBox strWhere
    End With
End Sub
Avatar billede terry Ekspert
28. september 2020 - 13:22 #8
The code in the link is building the WhereCondition parameter of the DoCmd.OpenReport method, so it replaces the Like... criteria in the query.

So the WhereCondition looks something like this.

Klub IN("A", "C")
Avatar billede Bjørn Mester
28. september 2020 - 19:27 #9
Hej

Mail er på vej.

Mvh.
Bjørn
Avatar billede terry Ekspert
29. september 2020 - 12:41 #10
I have made a general function which gets the selected clubs from the listbox

Public Function GetClubs() As String

Dim varItem As Variant      'Selected items
Dim strWhere As String      'String to use as WhereCondition
Dim lngLen As Long          'Length of string
Dim strDelim As String      'Delimiter for this field type.
   
   
    GetClubs = ""
   
    strDelim = """"

    'Loop through the ItemsSelected in the list box.
    With Me.Liste52
        For Each varItem In .ItemsSelected
            If Not IsNull(varItem) Then
               
                strWhere = strWhere & strDelim & .ItemData(varItem) & strDelim & ","
               
            End If
        Next
    End With
   
    'Remove trailing comma. Add field name, IN operator, and brackets.
    lngLen = Len(strWhere) - 1
    If lngLen > 0 Then
        strWhere = "[Klub_Alias] IN (" & Left$(strWhere, lngLen) & ")"
    End If

    GetClubs = strWhere

End Function

Then for each report its just a case of calling the function

DoCmd.OpenReport "Spillere for angiven periode", acViewPreview, "", GetClubs(), acNormal
Avatar billede Bjørn Mester
29. september 2020 - 15:53 #11
Hi

Tusind tak for hjælpen.

BR.
Bjørn
Avatar billede terry Ekspert
29. september 2020 - 16:33 #12
Hope you can get the other reports working too
BR
Terry
Avatar billede Bjørn Mester
29. september 2020 - 20:22 #13
Hi
A little Problem, is it possible to insert the below code somewhere so you dont have to close "Vis Udskrift" to make another selection. F.eks. another club or more clubs?

    'Report will not filter if open, so close it.
    If CurrentProject.AllReports(strDoc).IsLoaded Then
        DoCmd.Close acReport, strDoc
    End If
   
    'Omit the last argument for Access 2000 and earlier. See note 4.
    DoCmd.OpenReport strDoc, acViewPreview, "", GetClubs() ', OpenArgs:=strDescrip

På forhånd tak (Thanks in advance???)
BR
Bjørn
Avatar billede terry Ekspert
29. september 2020 - 20:48 #14
Hope this is what you want

Put this function under the getClubs function

Private Function CloseReport(strDoc As String)

'Report will not filter if open, so close it.
    If CurrentProject.AllReports(strDoc).IsLoaded Then
        DoCmd.Close acReport, strDoc
    End If

End Function

Now make a few small changes to the other procedures which open reports
Hope you can see the necessary changes ;-)

Dim strDoc As String

    strDoc = "Spillere for angiven periode"
   
    CloseReport (strDoc)
    DoCmd.OpenReport strDoc, acViewPreview, "", GetClubs(), acNormal
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester