Avatar billede martini-xz Nybegynder
03. marts 2011 - 09:08 Der er 9 kommentarer og
1 løsning

excel springe et fælt over (macros)

hej jeg har mit excel ark som skriver en tid når jeg åbner det og skriver en anden tid når jeg lukker det bruger det til at holde styr på mine arbejdstimer

KODE:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

rk = Sheets("Arbejdstimer 2011").Range("d" & Rows.Count).End(xlUp).Row
Sheets("Arbejdstimer 2011").Range("d" & rk + 1) = Now()

End Sub


Private Sub Workbook_Open()

rk = Sheets("Arbejdstimer 2011").Range("b" & Rows.Count).End(xlUp).Row
Sheets("Arbejdstimer 2011").Range("b" & rk + 1) = Now()

End Sub


:KODE SLUT

Men nu kunne jeg godt tænke mig af lave det lidt smartere sådan efter en uge af det så sprang et fælt over så det er lidt nemmere at læse men andre gange skal den springe mere over ved fx ferie og sådan noget ved ikke hvor nemt det er og lave

Hjælp tak.
Avatar billede claes57 Ekspert
03. marts 2011 - 10:37 #1
som det er nu, så tages den næste frie række - du kan lave det om til 'kalender-look' ved at lade den bruge dagnummer i række-tallet.
Avatar billede kabbak Professor
03. marts 2011 - 11:40 #2
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim RK As Long, X As Byte
    If Weekday(Date) = vbMonday Then X = 1    'hopper en linje over hver mandag
    RK = Sheets("Arbejdstimer 2011").Range("D" & Rows.Count).End(xlUp).Row + X
    Sheets("Arbejdstimer 2011").Range("d" & RK + 1) = Now()
End Sub

Private Sub Workbook_Open()
    Dim RK As Long, X As Byte
    X = 0
    If Weekday(Date) = vbMonday Then X = 1    ''hopper en linje over hver mandag
    RK = Sheets("Arbejdstimer 2011").Range("B" & Rows.Count).End(xlUp).Row + X
    Sheets("Arbejdstimer 2011").Range("B" & RK + 1) = Now()
End Sub
Avatar billede martini-xz Nybegynder
04. marts 2011 - 16:29 #3
mange tak for løsningen kabbak men hvad med de da dage hvor jeg holder ferie der vil jeg jo gerne til af springe de felter ferien vare fx. hvis jeg har ferie i 3 dage skal den springe 3 felter over. er mugligt og lave ?
Avatar billede kabbak Professor
04. marts 2011 - 17:02 #4
Hvis du i kolonne A, sætter alle datoer for året, så finder denne selv datoen.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Arbejdstimer 2011").Range("A:A").Select
   
        Selection.Find(What:=Date, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Offset(0, 3).Activate ' 3 kolonner til højre for A kolonnen
        ActiveCell = Now()
End Sub

Private Sub Workbook_Open()
Sheets("Arbejdstimer 2011").Range("A:A").Select
    Selection.Find(What:=Date, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Offset(0, 1).Activate ' 1 kolonne til højre for A kolonnen
        ActiveCell = Now()
End Sub
Avatar billede claes57 Ekspert
04. marts 2011 - 17:03 #5
jeg har kun dansk version, men
=DATO(;MÅNED(IDAG());DAG(IDAG()))-DATO(;MÅNED(1);DAG(1))
giver fx 63 for i dag, og så skal den bare skrive i linje 63.
det bliver så til

Private Sub Workbook_BeforeClose(Cancel As Boolean)

rk = DATO(;MÅNED(IDAG());DAG(IDAG()))-DATO(;MÅNED(1);DAG(1))
Sheets("Arbejdstimer 2011").Range("d" & rk) = Now()

End Sub


Private Sub Workbook_Open()

rk = DATO(;MÅNED(IDAG());DAG(IDAG()))-DATO(;MÅNED(1);DAG(1))
Sheets("Arbejdstimer 2011").Range("b" & rk) = Now()

End Sub

så kan I selv oversætte...
Avatar billede claes57 Ekspert
04. marts 2011 - 17:14 #6
hvis jeg nu optog tastningen som makro, så bliver det oversat til
        "=DATE(,MONTH(TODAY()),DAY(TODAY()))-DATE(,MONTH(1),DAY(1))"

så resultatet bliver

Private Sub Workbook_BeforeClose(Cancel As Boolean)

rk = DATE(,MONTH(TODAY()),DAY(TODAY()))-DATE(,MONTH(1),DAY(1))
Sheets("Arbejdstimer 2011").Range("d" & rk) = Now()

End Sub


Private Sub Workbook_Open()

rk = DATE(,MONTH(TODAY()),DAY(TODAY()))-DATE(,MONTH(1),DAY(1))
Sheets("Arbejdstimer 2011").Range("b" & rk) = Now()

End Sub


bemærk at år ikke er med i beregning - så tager den år 1900, og det er et skudår, så feb er på 29 dage - på den måde vil 1. marts altid stå i samme række år for år.
Avatar billede claes57 Ekspert
04. marts 2011 - 17:27 #7
rk = DatePart("y", today(), vbUseSystemDayOfWeek, vbUseSystem)
giver også bare dagsnummeret
Avatar billede claes57 Ekspert
04. marts 2011 - 17:36 #8
today er ukent, så
rk = DatePart("y", Now(), vbUseSystemDayOfWeek, vbUseSystem)
så har den rækkenummer
Avatar billede martini-xz Nybegynder
11. marts 2011 - 13:49 #9
mange tak for svarene smid et svar så i kan få nogle point
Avatar billede martini-xz Nybegynder
24. juni 2011 - 19:47 #10
takker
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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