Danne rapporter dynamisk ved hjaelp af VBA kode.
I en Access (2007) applikation har jeg brug for at danne rapporter dynamisk ved hjaelp af VBA kode. Brugeren foretager visse valg ved hjaelp af controls, saasom listboxes, paa en formular. Jeg har googlet og eksperimenteret mig frem til, ud fra brugerens valg, at danne en streng med en SQL query, at lave et RecordSet fra denne streng, at lave en blank rapport, i denne rapport at indsaette labels i headeren og textboxe i detail sektionen for hver field i recordsaettet. Pyh. Nu har jeg brug for at gaa videre, men her toerrer mine kilder ud. For eksempel, det synes at detailsektionen automatisk saettes til godt 10 cm hvorimod jeg kun vil have den saa hoej som tekstboxen og rapporten skal grupperes paa et af felterne.Paa laengere sigt, ved nogen hvor jeg skal gaa hen for at laere ordenligt at lave rapporter og formularer dynamisk (hjaelp til selvhjaelp)? Et link? En bog (dansk/engelsk(/hollandsk) ligegyldigt)? Eller maaske et kursus? (Googling paa Access reports VBA giver stakkevis af resultater, men de handler mest om enkeltproblemer saasom at filtrere rapporter eller behandler vba kun forbigaaende.)
Paa kortere sigt, kan nogen hjaelpe mig med vba koden for at indstille detail sektionens hoejde og til at gruppere rapporten paa et af felterne?
Her er den kode jeg har flikket sammen fra forskellige kilder:
Private Sub createPersoonReport(strSQL As String)
Dim rs As Recordset
Dim fld As Field
Dim txt As TextBox
Dim lbl As Label
Dim top As Long
Dim left As Long
Dim rpt As Report
Dim det As Variant
top = 0
left = 0
Set rpt = CreateReport
rpt.RecordSource = strSQL
Set rs = CurrentDb.OpenRecordset(strSQL)
Set lbl = CreateReportControl(rpt.Name, acLabel, acPageHeader, , "Title", left, top)
lbl.SizeToFit
For Each fld In rs.Fields
Set lbl = CreateReportControl(rpt.Name, acLabel, acPageHeader, , fld.Name, left, 500)
lbl.SizeToFit
left = left + 1600
Next
left = 0
For Each fld In rs.Fields
Set txt = CreateReportControl(rpt.Name, acTextBox, acDetail, , fld.Name, left, top)
left = left + 1600
Next
DoCmd.OpenReport rpt.Name, acViewLayout
rs.Close
Set rs = Nothing
Set rpt = Nothing
End Sub