Avatar billede mansoor Nybegynder
16. december 2000 - 18:13 Der 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
 
End Sub
Avatar billede kru Nybegynder
20. december 2000 - 20:36 #1
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)

Håber det hjælper......

Avatar billede tvbamse Nybegynder
27. januar 2001 - 10:49 #2
Hej

Det kan gøres på følgende måde:

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

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