VBA: Hvordan filtrere rapporter programmatisk

Submitted by lroedal on Mon, 12/11/2017 - 00:43

Har du noen gang hatt behov for å velge hva som skal vises i en rapport, og at dette skal kunne defineres programmatisk? Da er det lykkedagen din i dag, det er nemlig ikke så avansert som man kan anta. Om vi tar utgangspunkt i en database med studenter hvor det er en tabell med informasjon om hver enkelt student, kan vi anta at det ønskes å vise en oversikt over disse i en rapport. Men, det er ikke praktisk å vise alle studentene på en gang. Det er derfor ønskelig om man kunne filtrert studenter etter hjemkommune, studium og hvilket år de begynte på skolen. Legger ved et kodeeksempel under, som jeg antar er lagt i en knapp på et enkelt skjema som brukes for å vise rapporten. Denne koden åpner en filtrert versjon av rapporten, bestemt ut fra hva du velger på skjemaet ditt. Velger du ingenting, er standarden at alle oppføringer tas med fra det valget. Bare legg igjen en kommentar om det er noe som skulle være uklart!

  1. Private Sub btnRapport_Click()
  2. 'Sjekker valg
  3. Dim strKommune, strStudium, intAar as Variant
  4.  
  5. 'Antar comboboksen cbKommune for å velge kommune
  6. If IsNull(Me.cbKommune.Value) Then
  7. strKommune = "Like '*'" 'Henter ut alle oppføringer om valg ikke er gjort
  8. Else
  9. strKommune = " = '" & Me.cbKommune.Value & "'"
  10. End If
  11.  
  12. 'Antar comboboksen cbStudium for å velge studium
  13. If IsNull(Me.cbStudium.Value) Then
  14. strStudium = "Like '*'"
  15. Else
  16. strStudium = " = '" & Me.cbStudium.Value & "'"
  17. End If
  18.  
  19. 'Antar tekstboksen txtAar for å skrive inn ønsket år
  20. If IsNull(Me.txtAar.Value) Then
  21. intAar = "Like '*'"
  22. Else
  23. intAar = "& Me.txtAar.Value &" 'legg merke til mangelen på ' her, dette er pga. intAar er en integer, og ikke en string
  24. End If
  25.  
  26. Dim strFilter As String
  27. strFilter = "[Hjemkommune] " & strKommune & " AND [Studium] " _
  28. & strStudium & " AND [Studie startet] " & intAar & ""
  29.  
  30. DoCmd.OpenReport "rptStudent", acPreview 'åpner med forhåndsvisning
  31.  
  32. With Reports![rptStudent]
  33. .Filter = strFilter
  34. .FilterOn = True
  35. End With
  36. End Sub