02. januar 2008 - 09:31 Der 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)

Den er efter sigende kodet i VB??
02. januar 2008 - 09:32 #1
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!
02. januar 2008 - 09:32 #2
Hvem kan hjælpe??
Avatar billede komputerdk Mester
02. januar 2008 - 10:52 #3
øh hvordan står data og hvordan bruger du funktionen i excel?
Avatar billede kabbak Professor
02. januar 2008 - 10:53 #4
Prøv at rette 38717 til 39082
Avatar billede kabbak Professor
02. januar 2008 - 10:54 #5
Forklaring 38717 er det samme som 31-12-2005
39082 er 31-12-2006
Avatar billede kabbak Professor
02. januar 2008 - 11:04 #6
prøv denne, den burde skifte efter aktuel år

Function getDato(uge, dag)
    Dim str As String, Sidstedag As Date
  Sidstedag = DateSerial(Year(Date) - 1, 12, 31)
    Select Case dag
        Case "mandag"
            str = Format(CVDate((uge * 7) + (Sidstedag - 5)), "dddd") & " d. " & CVDate((uge * 7) + (Sidstedag - 5))
        Case "tirsdag"
            str = Format(CVDate((uge * 7) + (Sidstedag - 4)), "dddd") & " d. " & CVDate((uge * 7) + (Sidstedag - 4))
        Case "onsdag"
            str = Format(CVDate((uge * 7) + (Sidstedag - 3)), "dddd") & " d. " & CVDate((uge * 7) + (Sidstedag - 3))
        Case "torsdag"
            str = Format(CVDate((uge * 7) + (Sidstedag - 2)), "dddd") & " d. " & CVDate((uge * 7) + (Sidstedag - 2))
        Case "fredag"
            str = Format(CVDate((uge * 7) + (Sidstedag - 1)), "dddd") & " d. " & CVDate((uge * 7) + (Sidstedag - 1))
    End Select
    getDato = str
End Function
Avatar billede komputerdk Mester
02. januar 2008 - 11:09 #7
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
02. januar 2008 - 14:34 #8
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??
02. januar 2008 - 14:35 #9
Det skal lige tilføjes at den selvfølgelig skal rettes til at kunne bruges i 2008!!
Avatar billede supertekst Ekspert
02. januar 2008 - 15:29 #10
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
   
    ugensFørsteDag = dag1
End Sub
02. januar 2008 - 15:34 #11
Supertekst... Super! Endnu engang tak!!
Komputerdk og KABBAK, tak for jeres indlæg!

Godt nytår til alle!
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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