• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Tijdrit

Status
Niet open voor verdere reacties.

JackK

Nieuwe gebruiker
Lid geworden
24 jul 2005
Berichten
4
Voor een tijdregistratie t.b.v. een tijdrit wil ik excel een aplicatie maken. Mijn idee is om hierin de tijden van de deelnemers te registreren op basis van de systeemklok van de pc. In een werkblad in excel wil ik achter de naam van de deelnemers in een cel kunnen klikken waarna de computer in deze cel de systeemtijd van dat moment weergeeft. Ik heb wel gevonden hoe ik deze tijd middels een formule in de cel kan laten verschijnen (met commando =NU()), maar als ik dit in een andere cel weer doe wordt de eerste tijdnotatie ook overschreven.
Heeft iemand een idee hoe ik dit op kan lossen of waar ik een voorbeeld van een dergelijke toepassing kan vinden? graag jullie hulp

Alvast bedankt

Jack
 
Hoi Jack,

De functie nu() heeft als kenmerk dat het telkens opnieuw berekend wordt als je bijv. op F9 klikt.
Via de toetsenbordcombinatie Ctrl+Shft+: kun je de huidige tijd automatisch noteren, maar niet in seconden nauwkeurig. Wil je dat laatste wel, dan kun je een macro schrijven met het volgende erin:
Sub Tijd_in_Seconden()
ActiveCell.Value = Time
ActiveCell.NumberFormat = "h:mm:ss AM/PM"
End Sub

Groeten,

Richard
 
Hallo Richard

Bedankt voor je snelle reactie. Als ik het goed begrijp verander ik met je regels in de makro de celeigenschappen van de actieve cel. Als ik vervolgens met de toetscombinatie ctrl+shift+: de tijd in de cel laat noteren verandert de instelling weer naar minuten en seconden. Is het mogelijk om beide zaken in een makro te vangen, welke bij voorkeur aangestuurd wordt door met de linker muisknop in de gewenste cel te klikken?

Graag nog even je reactie.

Alvast bedankt

Jack
 
Hoi Jack,

Met een klein beetje VBA kom je een heel eind.

Ik ben er even van uitgegaan dat de deelnemers steeds langs hetzelfde meetpunt komen en dat de tussentijden geregistreerd moeten worden. Door met je muis in de cel te klikken noteer je de tijd.

Met Alt & F11 naar de programmacode van je werkblad:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("D11:K20")) Is Nothing Then
If Target.Columns.Count + Target.Rows.Count = 2 And IsEmpty(Target) Then Target = Now(): Cells(Target.Row,1).Select
End If
End Sub

Wat doet de code:
Not Intersect(Target, Range("D11:K20")) Is Nothing
In de range D11:K20 werkt de code daarbuiten niet. Ander bereik, code aanpassen.
Target.Columns.Count + Target.Rows.Count = 2 And IsEmpty(Target)
Als meerdere cellen geselecteerd zijn of de cel al gevuld is werkt de code niet.
Dit voorkomt dat je in 1 keer met je muis te veel cellen kan invullen of dat per ongeluk een historische waarde overschrijft.
Met Target=Now() zet je de code in de cel, met Cells(Target.Row,1) zet je de cursor weer uit het gebied zoat je direct klaar bent voor nieuwe invoer.

Jeroen
 
hallo Jeroen

Bedankt voor je reactie. Ik ben helaas niet bekend met het werken in VBA. Desondanks ben ik toch aan de slag gegaan, maar als ik op Alt+F11 druk kan ik de code niet invoeren. Met de knop macro starten wordt een naam voor de macro gevraagd. Als ik hier een naam opgeef krijg ik al een regel sub, gevolgd door de naam van de macro en een regel end sub. door jou programmacode hier tussen te plaatsen krijg ik allerlei foutmeldingen. Kun je me wat meer vertellen over hoe ik de programmacode in moet voeren?

bij voorbaat dank

Jack
 
Hoi Jack,

Wanneer je een applicatie wilt bouwen, zul je toch echt verstand van VBA moeten hebben! Een echte applicatie betekent namelijk ook denken aan het beschermen van de gegevens, het beperken van wat een gebruiker kan doen etc!

De paar macroregels die ik je gaf, geven in de actieve cel de huidige systeemtijd weer. Ik ging ervan uit dat je zelf wel de cel kon selecteren waarin de begintijd of eindttijd van de racers moet komen te staan. Bijv.
Range("A2").Select
ActiveCell.Value = Time
ActiveCell.NumberFormat = "h:mm:ss AM/PM"
Range("B2").Select
......
Waarbij in A2 de begintijd komt te staan, en in cel B2 de eindtijd.

Zelf een macro schrijven betekent dat je via Alt+F11 naar VBA gaar. Via invoegen - module kun je een moduleblad invoegen. Daarin kun je dan zelf een macro schrijven. Die macro begint met:
sub Tijdregistratie()
... hier komen nog meer regels
en eindigt met:
.....
end sub

Op het Excelwerkblad zul je een knop moeten zetten die de macro start zodat je bij de start en finish alleen op de knop hoeft te drukken. Maar je kunt ook een toetsenbordcombinatie toewijzen.
Probeer eerst eens de macrorecorder uit.

Veel succes met bouwen,

Richard
 
JackK,

Probleem van =nu() is precies wat er staat, namelijk Nu, dit is dus een waarde die zich steeds zal aanpassen.
Na elke input controleerd Excel het blad en lijkt of er berekeningen uit gevoerd moeten worden of waarden geupdate... en bij nu krijg je dan steeds de waarde van nu...

Oplossing zou zijn telkens deze waarde (cel) te selecteren, te copieën en te plakken als waarde.
Omdat dat met de hand elke keer veel tijd kost is een macro oplossing het handigste.

Ik heb even snel een blad gemaakt.
Er staat twee buttons op, één om te starten en een om te stopen.

Dit is de code van de start button

Sub Start()
'
Dim iRij As Integer
' Wat is de active rij
iRij = ActiveCell.Row
If iRij = 1 Then
'niets doen als je in rij 1 staat
End
End If
' anders zet in active rij, kolom B de waarde nu
Range("B" & iRij).Value = Now()
' Selecteer deze waarde
Range("B" & iRij).Select
' opmaak
ActiveCell.NumberFormat = "h:mm:ss"
' kopieer en plak als waarde
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
' maak D en F leeg
Range("D" & iRij).Value = ""
Range("F" & iRij).Value = ""
' klaar
End Sub

De stop code doet eigenlijk het zelfde plaatst echter ook nog een verschil tijd.

Sub Stoppen()
'
Dim iRij As Integer
iRij = ActiveCell.Row
If iRij = 1 Then
End
End If
Range("D" & iRij).Value = Now()
Range("D" & iRij).Select
ActiveCell.NumberFormat = "h:mm:ss"
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
Range("F" & iRij).Select
ActiveCell.NumberFormat = "h:mm:ss"
' zet het verschil van D en B in F
Range("F" & iRij).Value = Range("D" & iRij).Value - Range("B" & iRij).Value
End Sub

De tip om wat met de macro recorder te oefenen om te kijken wat excel doe in VBA als je dingen in Excel doet is een goede methode om vertrouwd te raken met VBA.
Als meer wilt leren over Excel en VBA raad ik je aan eens bij deze link te kijken.
 
Laatst bewerkt:
Hoi Jack,

Alt & F11, als het goed is zie je links in het scherm de projectverkenner met daarin de werkbladen van je werkboek. Klik op het werkblad waar je de code wilt laten werken.

Zie je geen projectverkenner, Beeld -> Projektverkenner.

Jeroen
 
Heren

Na wat passen en meten is het projectje geslaagd. Bedankt voor de hulp.

Jack
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan