16. december 2000 - 18:13Der er
1 kommentar og 1 løsning
Opsummere tal i rapport
jeg prøver i rapportfoden at opsummere hvor mange deltagerer der er, det går også godt så længe rapporten kun fylder én side. Problemmet opstår når den fylder flerer sider, så regner den forkert, jeg kan ikke umidbart se hvad jeg gør forkert.
Jeg håber der er en, som har en løsning
Kode:
Dim Linie As Byte Dim Total As Integer Dim AntalIalt As Integer
Private Sub Detaljesektion_Format(Cancel As Integer, FormatCount As Integer) If Linie > 31 Then Linie = 1 Total = 0 Total = AntalIalt AntalIalt = 0 Else Linie = Linie + 1 AntalIalt = AntalIalt + Antal_Deltagere_Atletik Total = AntalIalt End If
Jeg må tilstå at jeg aldrig har forsøgt mig med opsummeringer i VBA i rapporter, men det ser spændende ud, så her er et par bud.
Den nemmeste løsning er at du laver et ganske almindelig opsummeringsfelt i gruppefoden og i rapportfoden. Gruppefoden vil automatisk indeholde antallet/summen pr. gruppe, rapportenfoden vil automatisk indeholde antallet/summen for hele rapporten. For at få summen(totalen) skriver du =Sum([feltnavn]), for at få antallet skriver =Antal([feltnavn]) i feltets kontrolelementkilde.
Hvis du vil have summen placeret et andet sted end i foden, gør du sumfeltet usynligt og refererer til dets navn i et nyt felt (kontrolelementkilde=[navn]), der hvor du vil have summen placeret.
Totaler pr. side er lidt mere tricky. Her er et eksempel på hvordan man kan gøre det (Jeg har oprettet et ubundet felt i min sidefod ved navn [TotalPrSide] :
Option Compare Database Option Explicit Dim a As Integer
Private Sub Detaljesektion_Print(Cancel As Integer, PrintCount As Integer) a = a + 1 End Sub
Private Sub Report_Page() AntalPrSide = a a = 0 End Sub
, som tilføjes i klassemodulet under de respektive hændelser.
Problemet ved den kode du har skrevet er at du benytter en hændelse der indtræffer for tidligt (Før siden er opbygget). Istedet skal du bruge hændelsen \"Udskrivning\" for detalejesektionen, der indtræffer en gang pr. record (Eller \'linie\') for at tælle op efterhånden som siderne opbygges.
Prøv evt. at smide et par msgbox\'es ind i hændelserne Detaljesektion_Format, Detaljesektion_Print og Report_Page, så du kan se hvornår de indtræffer.
Hvis det bliver ved med at drille må du sende mig en zip af databasen ;o)
Public Sub EnSide() ARecord = ARecord + 1 Linie = Linie + 1 Total = Total + Antal_Deltagere_Atletik If ARecord = AntalRecord + 1 Then Exit Sub End If End Sub Public Sub FlereSider() If (ARecord = AntalRecord) Or (Linie > 31) Then Total = Total + AntalIalt Linie = 1 AntalIalt = 0 Else Linie = Linie + 1 AntalIalt = AntalIalt + Antal_Deltagere_Atletik End If ARecord = ARecord + 1 If ARecord = AntalRecord + 1 Then Exit Sub End If
End Sub
Private Sub Rapportfod_Format(Cancel As Integer, FormatCount As Integer) If FoersteGang Then lblIalt = Total FoersteGang = False End If End Sub Private Sub Detaljesektion_Format(Cancel As Integer, FormatCount As Integer) If AntalRecord <= 31 Then If AntalRecord >= ARecord Then EnSide End If Else FlereSider End If End Sub
Private Sub Report_Open(Cancel As Integer) AntalRecord = DCount(\"Antal_Deltagere_Atletik\", \"Atletik_For\") If AntalRecord = 0 Then MsgBox (\"Der er ingen, som er tilmeldt i denne disciplin\") Cancel = -1 End If Linie = 0 AntalIalt = 0 Total = 0 FoersteGang = True End Sub
Synes godt om
Ny brugerNybegynder
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.