02. januar 2008 - 09:31Der er
10 kommentarer og 1 løsning
Automatisk datoopdatering i exel/VB
Hej, Jeg bruger i forbindelse med mit arbejde et exel ark, der er udformet som en kalender. Dvs. at når jeg ændrer ugenummeret så opdaterer kalenderen automatisk med de korrekte datoer.
Probelemet er at vi, som nogen måske har opdaget, er gået ind i 2008, og her opdaterer den ikke automatisk mere. (den bruger stadig 2007 datoerne)
Jeg fik følgende svar sidste år fra supertekst, men kan ikke selv rette skemaet til..
Problemet var følgende: Option Explicit
Sub indsætDato(uge) With Worksheets("Kalender") .Range("A4").Value = getDato(uge, "mandag") .Range("D4").Value = getDato(uge, "tirsdag") .Range("G4").Value = getDato(uge, "onsdag") .Range("J4").Value = getDato(uge, "torsdag") .Range("M4").Value = getDato(uge, "fredag") End With End Sub
Function getDato(uge, dag) Dim str As String
Select Case dag Case "mandag" str = Format(CVDate((uge * 7) + (38717 - 5)), "dddd") & " d. " & CVDate((uge * 7) + (38717 - 5)) Case "tirsdag" str = Format(CVDate((uge * 7) + (38717 - 4)), "dddd") & " d. " & CVDate((uge * 7) + (38717 - 4)) Case "onsdag" str = Format(CVDate((uge * 7) + (38717 - 3)), "dddd") & " d. " & CVDate((uge * 7) + (38717 - 3)) Case "torsdag" str = Format(CVDate((uge * 7) + (38717 - 2)), "dddd") & " d. " & CVDate((uge * 7) + (38717 - 2)) Case "fredag" str = Format(CVDate((uge * 7) + (38717 - 1)), "dddd") & " d. " & CVDate((uge * 7) + (38717 - 1)) End Select getDato = str End Function
Idet 38717 er den numeriske værdi for den 31-12-05!
prøv den her.. men Kabbaks er nok lidt smartere , da man ikke skal lave en replace i koden..
Function getDato(uge, dag) Dim str As String '39445 er sidste lørdag året før , her 29-12-2007 'ændret til CVDATE til Cdate, da CVdate er en gammel funktion
Select Case dag Case "mandag" str = Format(CDate((uge * 7) + (39445 - 5)), "dddd") & " d. " & CDate((uge * 7) + (39445 - 5)) Case "tirsdag" str = Format(CDate((uge * 7) + (39445 - 4)), "dddd") & " d. " & CDate((uge * 7) + (39445 - 4)) Case "onsdag" str = Format(CDate((uge * 7) + (39445 - 3)), "dddd") & " d. " & CDate((uge * 7) + (39445 - 3)) Case "torsdag" str = Format(CDate((uge * 7) + (39445 - 2)), "dddd") & " d. " & CDate((uge * 7) + (39445 - 2)) Case "fredag" str = Format(CDate((uge * 7) + (39445 - 1)), "dddd") & " d. " & CDate((uge * 7) + (39445 - 1)) End Select getDato = str End Function
Hej Komputerdk og KABBAK, Tak for jeres svar! Problemet er bare at jeg SLET ingen forstand har på VB eller for den sags skyld exel... Jeg bruger funktionen på den måde at jeg har en ugerapport/ugeskema, hvori jeg fører mine møder. Jeg retter så uge nummeret, og så tilretter skemaet automatisk datoerne, på den respektive ugedage... Kan i guide mig igennem ovenstående, eller kan jeg maile jer exelarket??
Option Explicit Dim ddNr As Long, ugensFørsteDag As Date Sub indsætDato(uge) denFørsteDagDetteÅr uge
With Worksheets("Kalender") .Range("A4").Value = "Mandag" & " d. " & ugensFørsteDag .Range("D4").Value = "Tirsdag" & " d. " & DateAdd("d", 1, ugensFørsteDag) .Range("G4").Value = "Onsdag" & " d. " & DateAdd("d", 2, ugensFørsteDag) .Range("J4").Value = "Torsdag" & " d. " & DateAdd("d", 3, ugensFørsteDag) .Range("M4").Value = "Fredag" & " d. " & DateAdd("d", 4, ugensFørsteDag) End With End Sub Private Sub denFørsteDagDetteÅr(uge) Dim dag1 As Date, denFørsteUgedag, ugeNr dag1 = "01-01-" & 2008 'Year(Now) denFørsteUgedag = Format(dag1, "w", 2, 2) ugeNr = Format(dag1, "ww", 2, 2)
Rem ryk frem til uge 1 - hvis den 1. uge ikke er 1 If ugeNr <> "1" Then While Format(dag1, "ww", 2, 2) <> "1" dag1 = DateAdd("d", 1, dag1) Wend Else If denFørsteUgedag <> 1 Then dag1 = DateAdd("d", (Val(denFørsteUgedag) - 1) * -1, dag1) End If End If
If uge <> "1" Then dag1 = DateAdd("ww", Val(uge) - 1, dag1) End If
Supertekst... Super! Endnu engang tak!! Komputerdk og KABBAK, tak for jeres indlæg!
Godt nytår til alle!
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.