Avatar billede Bjørn Mester
12. december 2022 - 02:05 Der er 5 kommentarer og
1 løsning

Beregnet felt i rapport på dele af data

Hej
Jeg laver en slutrapport for hver uge f.eks. med datoerne 16/1-2022 17/1-2022 18/1-2022 osv til 22/1-2022.
Det jeg gerne vil er at lave et beregnet felt med summen af totalbeløbet for de datoer der er den 19. og derunder og et beregnet felt med summen af de beløb der er fra den 20. og derover. Felterne skal naturligvis kun kunne ses på rapporten hvis den 19. er i perioden.

Mvh.
Bjørn
Avatar billede Gustav Ekspert
12. december 2022 - 08:02 #1
I detailsektionen kunne du oprette to (skjulte) tekstbokse, Total19, Total20, med ControlSource:
=IIf(Day([Dato])<=19;[Total];0)
=IIf(Day([Dato])>=20;[Total];0)

og så have to tekstbokse til summerne:
=Sum([Total19])
=Sum([Total20])

Hvordan de skal skjules, hvis den 19. ikke er med i perioden, må kunne styres af, hvorledes du specificerer perioden.
Avatar billede Bjørn Mester
13. december 2022 - 17:20 #2
Hej Gustav

Jeg var åbenbart nødt til at skrive de 2 IIf sætninger i forespørgslen der ligger til grund for rapporten. Jeg kunne ikke få lov til at lave beregning i Rapportfoden på de beregnede felter i detaljesektionen selvom de var beregnet rigtigt. Jeg fatter ikke en meter af hvorfor.
Jeg specificerer perioden med År-Ugenummer f.eks. 2022-42.

Mvh.
Bjørn
Avatar billede Bjørn Mester
14. december 2022 - 11:57 #3
Tillægsspørgsmål til ovenstående: Jeg har de 2 tekstbokse ved navn Sum19 og Sum20. Hvordan får jeg dem gjort usynlige hvis den 19, IKKE optræder i den aktuelle uge. F.eks. skal felterne ikke kunne ses hvis det er uge 2023-01 eller 2023-02. Men uge 2023-03 (16/1 til 22/1) indeholder den 19. og de skal derfor vises.

Mvh.
Bjørn
Avatar billede Gustav Ekspert
14. december 2022 - 12:57 #4
Først må du finde datoerne for ugen. Den første dag, mandag, kan findes med min funktion DateYearWeek:
' Returns the date of Monday for the ISO 8601 week of IsoYear and Week.
' Optionally, returns the date of any other weekday of that week.
'
' 2017-05-03. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function DateYearWeek( _
    ByVal IsoWeek As Integer, _
    Optional ByVal IsoYear As Integer, _
    Optional ByVal DayOfWeek As VbDayOfWeek = VbDayOfWeek.vbMonday) _
    As Date
   
    Dim WeekDate    As Date
    Dim ResultDate  As Date
   
    If IsoYear = 0 Then
        IsoYear = Year(Date)
    End If
   
    ' Validate parameters.
    If Not IsWeekday(DayOfWeek) Then
        ' Don't accept invalid values for DayOfWeek.
        Err.Raise DtError.dtInvalidProcedureCallOrArgument
        Exit Function
    End If
    If Not IsWeek(IsoWeek, IsoYear) Then
        ' A valid week number must be passed.
        Err.Raise DtError.dtInvalidProcedureCallOrArgument
        Exit Function
    End If
   
    WeekDate = DateAdd(IntervalSetting(dtWeek), IsoWeek - 1, DateFirstWeekYear(IsoYear))
    ResultDate = DateThisWeekPrimo(WeekDate, DayOfWeek)
   
    DateYearWeek = ResultDate

End Function
Fuld kode i modul DateFind.bas, som findes i mit bibliotek:

https://github.com/GustavBrock/VBA.Date

Hvis dagen for denne dato er mellem 9 og 16 inklusive, skal tekstboksene skjules.

Det kan du formentlig gøre under hændelsen VedFormattering eller VedUdskrivning ved at sætte en variabel, Visible:

Visible = True hvis de skal vises, False hvis ikke,
og så styre visning af tekstboksene:
Me!Sum19.Visible = Visible
Me!Sum20.Visible = Visible
Avatar billede Bjørn Mester
15. december 2022 - 07:37 #5
Takker. Ser lige på det i weekenden.
Avatar billede Bjørn Mester
23. december 2022 - 10:57 #6
Hej igen.

Jeg fik lavet en betinget formatering på sumfelterne i rapportfoden. Så nu kan de kun ses hvis både Total19 og Total20 >0.

Tak for hjælpen.

Mvh.
Bjørn
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

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