Avatar billede choco Nybegynder
20. februar 2010 - 15:45 Der er 14 kommentarer og
1 løsning

forenkel koden??

Hej eksperter..

Så er jeg tilbage igen.. :)
har et stykke kode, som faktisk virker helt præcist, som det skal. Nu vil jeg så høre om det måske kunne laves lidt mere enkelt, og hvis det kan om der er nogen som kan hjælpe mig med det, da det kommer til at fylde lidt meget, når det skal ligges ind til 31 rækker, og excel kommer på overarbejde med så meget kode på en gang..??

Sub timer()
Dim iResultat
Dim iResultat1
Dim iResultat2

Sheets("jan").Select
If [m16] = 2 Then GoTo aften
If [m16] = 1 Then GoTo dag
dag:
    [x16] = ""
    [y16] = ""
If [i16] * 24 < 17 Then
    iResultat = 17 - ([i16] * 24)
    iResultat1 = ([j16] * 24) - 17
    [s16] = iResultat + ([e16 - d16] * 24)
   
        If [n16] = "" Then
            [t16] = iResultat1
        Else
            GoTo Nat
        End If
Else
    [t16] = ([j16 - I16]) * 24
End If
Exit Sub

aften:
    [s16] = ""
    [t16] = ""
If [i16] * 24 < 17 Then
    iResultat = 17 - ([i16] * 24)
    iResultat1 = ([j16] * 24) - 17
    [x16] = iResultat
    [y16] = iResultat1
Else
    [y16] = ([j16 - I16]) * 24
End If

If [o16] < [n16] Then
        iResultat2 = ((([o16] * 24) + 24) - ([n16] * 24)) '+ iResultat1
        [z16] = iResultat2
    Else
        iResultat2 = ([o16 - n16] * 24) '+ iResultat1
        [z16] = iResultat2
    End If
Exit Sub

Nat:
If [o16] < [n16] Then
        iResultat2 = ((([o16] * 24) + 24) - ([n16] * 24)) + iResultat1
        [t16] = iResultat2
    Else
        iResultat2 = ([o16 - n16] * 24) + iResultat1
        [t16] = iResultat2
    End If
Exit Sub
End Sub
Avatar billede kabbak Professor
20. februar 2010 - 23:54 #1
Hvad mener du
med "når det skal ligges ind til 31 rækker"

skal koden dække over 31 rækker i excel, så skal du jo bare fange aktive række, så kan koden gælder dem for alle, med lidt tilretning.

prøv at sende et eksempel ark.
Avatar billede kabbak Professor
20. februar 2010 - 23:55 #2
kabbak snabela tiscali dot dk
Avatar billede choco Nybegynder
21. februar 2010 - 16:17 #3
kort sagt er det time seddler jeg er ved at lave.
så jeg har jo mandag, tirsdag, osv. og så en hel månede (31 rækker)

men det er jo en større opgave, da den selv skal finde ud af, om den skal regne timerne ud det ene eller andet sted.

Har en seddel til fast arbejdsplads, den anden er i tilfælde af at jeg tager et vikarjob, begge seddler er der 3 * 7 celler, (dag, aften, nat) og ned af fra (mandag til søndag)

Håber det gav et lidt bedre indblik i hva' jeg prøver på, koden har jeg, som i du ser fundet, men sys den virker noget uoverskuelig da den skal bruges i så mange rækker, så håbet der var en som lige kendte nogle små fikse koder som ville gøre det lidt nemmer??
Avatar billede kabbak Professor
21. februar 2010 - 17:42 #4
Jeg prøver:

koden er lavet om, så du skal stå på den række der udregnes, den virker overalt.

Sub timer()
    Dim iResultat, iResultat1, iResultat2, RW As Long
    'Sheets("jan").Select
    RW = ActiveCell.Row    ' her findes rækken hvor du står

    If Cells(RW, "M") = 2 Then GoTo aften
    If Cells(RW, "M") = 1 Then GoTo dag
dag:
    Cells(RW, "X") = ""
    Cells(RW, "Y") = ""
    If Cells(RW, "I") * 24 < 17 Then
        iResultat = 17 - (Cells(RW, "I") * 24)
        iResultat1 = (Cells(RW, "J") * 24) - 17
        Cells(RW, "S") = iResultat + (Cells(RW, "E") - Cells(RW, "D") * 24)

        If Cells(RW, "N") = "" Then
            Cells(RW, "T") = iResultat1
        Else
            GoTo Nat
        End If
    Else
        Cells(RW, "T") = (Cells(RW, "J") - Cells(RW, "I")) * 24
    End If
    Exit Sub

aften:
    Cells(RW, "S") = ""
    Cells(RW, "T") = ""
    If Cells(RW, "I") * 24 < 17 Then
        iResultat = 17 - (Cells(RW, "I") * 24)
        iResultat1 = (Cells(RW, "J") * 24) - 17
        Cells(RW, "X") = iResultat
        Cells(RW, "Y") = iResultat1
    Else
        Cells(RW, "Y") = (Cells(RW, "J") - Cells(RW, "I")) * 24
    End If

    If Cells(RW, "O") < Cells(RW, "N") Then
        iResultat2 = (((Cells(RW, "O") * 24) + 24) - (Cells(RW, "N") * 24))    '+ iResultat1
        Cells(RW, "Z") = iResultat2
    Else
        iResultat2 = (Cells(RW, "O") - Cells(RW, "N") * 24)    '+ iResultat1
        Cells(RW, "Z") = iResultat2
    End If
    Exit Sub

Nat:
    If Cells(RW, "O") < Cells(RW, "N") Then
        iResultat2 = (((Cells(RW, "O") * 24) + 24) - (Cells(RW, "N") * 24)) + iResultat1
        Cells(RW, "T") = iResultat2
    Else
        iResultat2 = (Cells(RW, "O") - Cells(RW, "N") * 24) + iResultat1
        Cells(RW, "T") = iResultat2
    End If
    Exit Sub
End Sub
Avatar billede choco Nybegynder
23. februar 2010 - 15:55 #5
Du har ramt helt plet med det svar, det funker præcis som det skal.. så smid et svar.. :)

vil dog lige høre om man evt kan få den til at tage højde for at man efter at have trykket start tid og slut tid normalt ville bruge enter i stedet for tab igen??
Avatar billede kabbak Professor
23. februar 2010 - 16:36 #6
Vi kan lave den automatisk, hvis du synes, hvilke kolonner skriver du starttid og sluttid i, og hvilken rækker er du i.
eks. C2:D32

hvor du har starttid i c kolonnen og sluttid i D kolonnen
Avatar billede choco Nybegynder
23. februar 2010 - 16:53 #7
den har jeg faktisk flere steder da der både er plads til at skrive dag, aften og nat vagter ind.. men hva mener du med at lave den automatisk??

Du glemte dit svar.. ;)
Avatar billede kabbak Professor
23. februar 2010 - 17:19 #8
Jeg mener at hvis du skriver i en række og så når du er færdig med at skrive i den sidste celle, så kører koden automatisk.
Jeg skal bare vide hvilken kolonne du sidst skriver i.
Avatar billede choco Nybegynder
23. februar 2010 - 17:35 #9
Jeg har dag start i "D", aften start i "I", og nat start i "N"
og så dag slut i "E", aften slut i "J", og nat slut i "O"

og hva for en jeg skriver i sidst kommer jo an på om jeg tilføjer dag, aften eller natte vagt..
Avatar billede kabbak Professor
23. februar 2010 - 17:41 #10
Det gør det jo lidt vanskeligere, men du kan jo også styre den bedre manuelt, den laver jo ikke noget uønsket. ;-))

jeg forstår ikke hvad du mener med:

"vil dog lige høre om man evt kan få den til at tage højde for at man efter at have trykket start tid og slut tid normalt ville bruge enter i stedet for tab igen??"
Avatar billede choco Nybegynder
23. februar 2010 - 18:16 #11
ja det gjord det nemlig.. :)
men du du må gerne skrive det til mig alligevel, kunne godt være jeg kunne få brug for det til noget andet jeg også har givet mig i kast med.. :)

hvis vi nu siger at jeg står i D16 og taster start tid ind, trykker tab, og taster slut tid ind, trykker jeg så enter nu, så hopper den ned på D17, hvilket betyder at det er række 17 og ikke række 16 den regner ud som den jo gerne skulle??

forstår du hva jeg mener med det nu??
Avatar billede kabbak Professor
23. februar 2010 - 18:29 #12
OK, det styrer du i Excel, her i 2003,
Funktioner > indstillinger >Fanen Rediger, ved Flyt markering efter Enter, vælg til højre.
Avatar billede kabbak Professor
23. februar 2010 - 18:42 #13
Denne i arkets modul, du skal have en i hvert ark du har timesedler i.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("E2:E32,J2:J32,O2:O32")) Is Nothing Then Exit Sub
    Call timer(Target.Row)
End Sub



Ret toppen af den anden kode til dette

Sub timer(RW)
    Dim iResultat, iResultat1, iResultat2 '
    'Sheets("jan").Select
  ' RW = ActiveCell.Row    ' her findes rækken hvor du står
Avatar billede choco Nybegynder
23. februar 2010 - 18:49 #14
okay, og hva er det helt præcis koden her vil gå ind og gøre??
Avatar billede kabbak Professor
23. februar 2010 - 18:52 #15
den del her, holder øje med om du skriver i E, J eller O kolonnen, der er der su skriver sluttid, hvis disse celler ændrer sig kører koden.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("E2:E32,J2:J32,O2:O32")) Is Nothing Then Exit Sub
    Call timer(Target.Row)
End Sub
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