06. juni 2010 - 19:52 Der er 6 kommentarer og
1 løsning

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
Avatar billede mugs Novice
06. juni 2010 - 21:33 #1
Fundet her på eksperten. Søge streng "rapporthøjde":

http://www.eksperten.dk/spm/525887
07. juni 2010 - 05:35 #2
Saa detailsektionen hedder Section(0).  Jeg har nu tilfoejet denne kode og det virker:  rpt.Section(0).Height = 0.

Jeg staar og skal afsted, kikker videre i aften.  Jeg gaetter paa at gruppering af en rapport har noget at goere med at definere Section(noget andet end 0).
07. juni 2010 - 19:56 #3
Jeg er tilbage, og jeg har soegt noget mere.  Mit spoergsmaal bestod af tre elementer:  (a) Paa langt sigt en kilde til "visdom" (links, boeger, kursus) for at lave dynamiske rapporter, paa kort sigt (b) hvordan man kan, med VBA, gruppere en rapport paa et field og (c) hvordan man kan indstille hoejden paa detail sektionen.  Mugs, du ledte mig i den rigtige retning med hensyn til hoejden paa detail sektionen. Laeg venligtst et svar for del-points.  Som alternativ til at gruppere paa en field fandt jeg denne kode til at "hide duplicates", rpt.Controls("Tekst10").HideDuplicates = True.  Jeg ville hellere have fundet en rigtig grupperings-loesning.  Kan nogen hjaelpe mig med det?
Avatar billede mugs Novice
07. juni 2010 - 20:13 #4
07. juni 2010 - 21:34 #5
Linket er nyttigt med hensyn til hvordan man sorterer.  Det med at gruppere lader det ligge.

Jeg lader spoergsmaalet staa aabent en dags tid eller to for at indfange ventuelt yderligere indlaeg.
Avatar billede mugs Novice
07. juni 2010 - 21:37 #6
Helt fint at afvente evt. yderligere indlæg.
Avatar billede mugs Novice
08. juni 2010 - 21:26 #7
Tak for point.
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
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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