24. november 2005 - 14:10Der er
25 kommentarer og 1 løsning
Tælle antal arbejdsdage i en måned.
Hej igen,
Jeg mangler en enkelt lille ting, før min arbejdstidskalender er fuldendt: Hvordan laver jeg en automatisk udregning af antal dage ($D7:$D37) minus lør-, søn- og helligdage. Jeg har nu fået helligdagsfunktionen til at virke, så week-ender samt helligdage er markeret med grå!
Flemming, idéen ser fin ud, men jeg tror ikke, at den fungerer i mit tilfælde, idet baggrundsfarven i mine dato-celler kommer ud fra en formateret betingelse. Altså cellerne er kun grå, hvis datoen er en lør-, søn- eller helligdag.
b_hansen -> Du har fuldstændig ret! Men som udgangspunkt har alle celler hvid baggrundsfarve. Det er først, når jeg genererer kalenderen for en given måned, at nogle af cellerne (via betinget formatering) får en grå baggrundsfarve. Ergo, hvis jeg bruger Flemmings eksempel, vil jeg enten få 0 (nul) eller 31 for januar 2006.
Jamen, antallet af arbejdsdage er vel først relevant, når du danner kalenderen? Det er jo lidt svært at kende antallet af lørdage, søndage og helligdage, før kalenderen er dannet.
Igen må jeg jo give dig ret :-) Men jeg skriver jo også kun herinde, fordi jeg ikke kan få det til at fungere. Lad mig forklare lidt nærmere:
I D2 har jeg måned/år - kalenderen bliver bygget på baggrund af denne celle og hver enkelt dato står så i cellerne $D7:$D37. Så snart jeg ændrer i D2, til f.eks. "01-02-2006", ændres kalenderen så og samtidig skifter cellerne farve i f.t. week-ends og helligdage! Måske det slet ikke kan lade sig gøre? Jeg ved det ikke!
Jeg ved ikke om jeg misforstår spørgsmålet, men kan du ikke anvende funktionen antal.arbejdsdage ?? Dvs: =antal.arbejdsdage($D7;$D37) den Engelske variant er: =networkdays($D7:$D37)
Resultatet blev =COUNT(D7:D37)-ColoredCellsCount(D7:D37;B4)
Har fjernet alle betingede formateringer - sløvede arket totalt. Lavede istedet en rutine i arkets eget kodemodul, som reagerer på skift a måned (i cellen START)
Private Const msRNG_START As String = "Start"
Private Sub Worksheet_Change(ByVal Target As Range) 'Flemming Dahl, November 2005, fvd@smartoffice.dk If Not Intersect(Target, Range(msRNG_START)) Is Nothing Then ColorWeekendsAndHolidaies Me.Name End If End Sub
Hvis den celle bliver ændret, så kaldes den farve makro jeg lige lavede
Public Sub ColorWeekendsAndHolidaies(ByVal sSheetName As String) 'Flemming Dahl, November 2005, fvd@smartoffice.dk ' Erstatning for betinget formatering Const sRNG_HEADER As String = "Header" Dim rCell As Range Dim rCurReg As Range Dim lCol As Long
' Find CurrentRegion med udgangspunkt i header rækken (6) Set rCurReg = Worksheets(sSheetName).Range(sRNG_HEADER).CurrentRegion ' Fjern header rækken fra rCurReg Set rCurReg = rCurReg.Offset(1, 0).Resize(rCurReg.Rows.Count - 1)
For Each rCell In rCurReg.Columns(3).Cells If ErHelligdag(rCell.Value) Then ' Helligdag For lCol = -1 To rCurReg.Columns.Count - 4 rCell.Offset(0, lCol).Interior.ColorIndex = 15 Next lCol Else ' Arbejdsdag For lCol = -1 To rCurReg.Columns.Count - 4 rCell.Offset(0, lCol).Interior.ColorIndex = xlNone Next lCol End If Next rCell End Sub
Jeg ændrede iøvrigt også første linie i makroen ErHelligdag, således man ikke behøver at skrivet TRUE, TRUE. Linien ser nu således ud:
Function ErHelligdag(ByVal TestDato As Long, _ Optional ByVal InclLørdage As Boolean = True, _ Optional ByVal InclSøndage As Boolean = True) As Boolean
Optional = valgfri - - - og hvis den undlades står der automatisk True
bak -> Det var dælme ellers en smart kalender du dér havde fået bakset sammen! Flemming Dahl har fået en kopi af mit regneark, som består af 12 kalenderark. Så snart der er et færdigt resultat af regnearket, vil det højst sandsynligt blive frigivet på Flemmings hjemmeside - her: http://www.smartoffice.dk/Tips/Eksperten/Index.asp Men det afgør Flemming. Han er beskæftiget til anden side i øjeblikket, så det varer nok lidt tid, før der sker noget m.h.t. kalenderen.
Men din kalender er smart; der er flere ting, som jeg kan bruge andet steds - takker... ;-)
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.