Format Now() issue

Status
Niet open voor verdere reacties.
Timevalue toegepast:

Kolom F: 27-07-2015 23:53:47
Kolom G: 28-07-2015 00:09:49

Uitkomst Kolom H: 23:43:58
De uitkomst klopt hier niet.
 
Als dergelijke gelijke cellen op meerdere plekken andere eigenschappen nodig hebben is er in het ontwerp al iets fout.

Fijn om op tijd te weten, want ik heb hier nog geen VBA op toegepast. Enkel Lay-Out. Dank je.
 
Of:
Code:
InlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Offset(, 5)
        UitlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Offset(, 6)
        SessieDuur = CDate(UitlogTijd) - CDate(InlogTijd)
                        
        .Offset(, 7) = CDec(SessieDuur)
        .Offset(, 7).NumberFormat = "[h]:mm:ss"
 
Goedenavond HSV. Ik kijk even naar jouw code, waarvoor bedankt.

Ik zie dat jij numberformat gebruikt. Hier was ik nog niet direct opgekomen.
Ook zie ik dat jij direct declareerd in de code middels CDate. Nu ga ik hier een domme vraag over stellen. Ik had ze aan het begin al gedeclareerd als String. Moet ik dit verwijderen? Vervolgens kom je aan met CDec en trek jij de boel van elkaar af.

Dit even in verband met mijn eerder gedane declaraties daar onnodige gedeclareerde variabelen alleen maar tijd en ruimte in beslag nemen.

Daarnaast heeft ook Edmoor mij een code toegespeeld en zijn opmerkingen gegeven. Mag ik heel ***lig vragen wat het verschil is met jouw code en die van hem?

Ik heb jouw code nog niet uitgeprobeerd. Ga ik zo doen. Er zit nu een hond met droepie ogen naar mijn te kijken en een beetje te janken. Dus voordat ik hier wateroverlast heb, ga ik even met haar naar buiten toe.
 
Laatst bewerkt:
Of:
Code:
Format((TimeValue(b) - TimeValue(a)) - (TimeValue(a) > TimeValue(b) * 24), "hh:mm:ss")

Waarbij a de starttijd en b de eindtijd is.
Dat geeft dan het verschil in tijd.
 
Edmoor....... Schiet mij eens lek op jouw code. a en b begrijp ik nog wel. Dat moet ik waarschijnlijk zelf even aanpassen, maar de volledige opzet en wat deze buiten het aftrekken doet..... Geen idee. Ook de *24 begrijp ik. Dat is om een notatie te krijgen groter dan 24 uur. Daar tussen in zit je met kennelijk een voorwaarde, als waarde a > waarde b dan vermenigvuldigen met 24 en dan de formatwijze.

Het geheel wordt op het eerste oog 2 maal afgetrokken. Deze opzet ken ik niet of er staat een teken verkeerd en dan wel te verstaan het tweede "-" teken.
 
Laatst bewerkt:
Daarmee kom je niet boven de 24 uur als er sprake is van dag-overschrijding Ed.
De declaratie als string mooi zo laten staan.
 
IK ga er ook vanuit dat boven de 24 uur niet nodig is.

@Maarten:
Dat is om ervoor te zorgen dat het verschil in tijd ook bij dag overschrijding nog steeds klopt.
 
Laatst bewerkt:
Dat kan ook natuurlijk. ;)
 
HSV, dank je. Jouw code werkt en aangepast naar .Cells in plaats van .Offset om alles gelijk te houden.

Alleen ik begrijp niet waarom jij .NumberFormat gebruikt in plaats van Format. Hier zit dus kennelijk- verschil in terwijl ik dacht dat deze hetzelfde deden. Ik bedoel ik vul de andere cellen toch ook met Format om een schrijfwijze te krijgen. Waarom dan hier anders mee?

Verder geef jij aan dat ik de strings gewoon zo moet laten staan. Hoewel ik dat wel doet, verander jij in de code de string ineens naar het datatype CDate om vervolgens later weer middels CDec te berekenen. Is dit niet een omweg of is dit omdat ik de waarde als string heb weg laten schrijven en als zodanig weer terughaal en, omdat je niet met strings kan rekenen, jij de string middels CDate omzet naar een datum om deze vervolgens weer middels CDec omzet te zetten naar een getal, zodat er wel mee kan worden gerekend.

Sorry, maar nog niet alles van declareren, zeker met rekenen, is mij duidelijk. Ik reken nu bijvoorbeeld voor het eerst met datum en tijd. Vandaar dat die voorbeelden die ik had opgeslagen op mijn overleden HDD nu zo mis. Daar stonden onder andere dit soort voorbeelden op en ben ik dus kwijt. Herstel is jammer genoeg niet meer mogelijk omdat de platters flink zijn beschadigd door de Headcrash en het door hem blijven zoeken naar data die deze niet meer kon vinden.

In ieder geval heb ik het stukje code als onderstaand ingevoegd op de juiste plaatsen.

Code:
    Dim LogTijd As String
    Dim InlogTijd As String
    Dim UitlogTijd As String
    Dim SessieDuur As String

    LogTijd = Format(Now, "dd-mm-yyyy hh:mm:ss")

    With Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp)
        .Cells(, 7) = LogTijd
                        
        InlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 6)
        UitlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 7)
        SessieDuur = CDate(UitlogTijd) - CDate(InlogTijd)
                        
        .Cells(, 8) = CDec(SessieDuur)
        .Cells(, 8).NumberFormat = "[h]:mm:ss"
    End With

Enorm dank je wel.

Edmoor ook jij enorm bedankt voor de genomen en getoonde moeite.
 
Laatst bewerkt:
Hoi HSV toch de code nog even anders aangepast. Ik vond de waarde die in een cel stond en in eerste werd gedeclareerd met het datatype string toch enigszins overbodig.

Jij gaf aan om dit lekker zo te laten staan, maar voor mijn gevoel was dit toch overbodig. Na de code beter bekeken te hebben heb ik de code opgeschoond en als onderstaand gewijzigd.

Ik heb het datatype van de variabelen: InlogTijd en UitlogTijd gewijzigd van As String naar As Date en het datatype van de variabele: Sessieduur gewijzigd van As String naar As Double. Na deze wijziging heb ik ook de conversies CDate bij Sessieduur en CDec bij .Cells(i ,8) verwijderd. Al moet ik toegeven dat ik voor CDec wel mijn twijfels heb. Immers Dim Sessieduur As Decimal bestaat niet terwijl Dim Sessieduur As Double weer wel bestaat of beide moeten als conversie en als datatype ook identiek zijn. Zo ja dan vraag ik mij af of dit volgens de "regels" duidelijk blijft en of dit "forceren" meer is om een variabele te besparen. Als dat namelijk zo is dan kan de coderegel Dim Sessieduur as Double ook verwijderd worden. Mijn doel is de code opschonen door overbodige coderegels te verwijderen. Omdat de uren in jouw code beneden de 10 zonder een voorloopnul werden weergegeven terwijl de voorloopnullen bij de minuten en seconden wel weergegeven wordt, heb ik naast genoemde wijzigingen ook de .NumberFormat = "[h]:mm:ss" van .Cells(i ,8) gewijzigd naar . NumberFormat = "[hh]:mm:ss".

Gevolg van deze wijzigingen is dat de code nog steeds op het eerste gezicht naar behoren werkt waaruit ik kan concluderen dat ik er van uit mag gaan dat ik met mijn gevoel juist zat. Hiermee wil ik jouw werk en moeite beslist niet afkraken, want jij zal er best een reden voor hebben, maar blijft de code ook op deze gewijzigde wijze goed werken of kan ik nu, al heb ik dat nog niet gemerkt met testen, kleine problemen of afwijkingen verwachten?

Nogmaals dit is nog niet mijn sterkste kant en soms twijfel ik nog wel eens met de wijze van declareren.

Hieronder de gewijzigde code als hoe ik hem nu heb opgeslagen.

Code:
    Dim LogTijd As String
    Dim InlogTijd As Date
    Dim UitlogTijd As Date
    Dim SessieDuur As Double

    LogTijd = Format(Now, "dd-mm-yyyy hh:mm:ss")

    With Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp)
        .Cells(, 7) = LogTijd
                        
        InlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 6)
        UitlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 7)
        SessieDuur = UitlogTijd - InlogTijd
                        
        .Cells(, 8) = SessieDuur
        .Cells(, 8).NumberFormat = "[hh]:mm:ss"
    End With

Zou het toch beter zijn om de conversie CDec bij Sessieduur terug te plaatsen dan wordt de code na jouw antwoord alsnog gewijzigd in onderstaande:

Code:
    Dim LogTijd As String
    Dim InlogTijd As Date
    Dim UitlogTijd As Date
    Dim SessieDuur As String 'DEZE VARIABELE KAN IN DEZE OPZET VOLGENS MIJ VERWIJDERD WORDEN

    LogTijd = Format(Now, "dd-mm-yyyy hh:mm:ss")

    With Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp)
        .Cells(, 7) = LogTijd
                        
        InlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 6)
        UitlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 7)
        SessieDuur = UitlogTijd - InlogTijd
                        
        .Cells(, 8) = CDec(SessieDuur)
        .Cells(, 8).NumberFormat = "[hh]:mm:ss"
    End With
 
Laatst bewerkt:
Je hebt geen variabelen en ook geen overbodige declaraties nodig:
Code:
Sub M_snb()
  With Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp)
    .offset(, 6).resize(,2) = array(Now,Now - .offset(, 5))
    .offset(, 7).NumberFormat = "[hh]:mm:ss"
   End With
End Sub
 
Laatst bewerkt:
Zo hoort het ook gedeclareerd te worden als 'Date', maar ik had geen zin om de gehele code over de kop te gooien.
Zoals @snb schrijft; geen variabelen maakt het eenvoudiger en hoef je niet steeds na te denken wat de waarde is van de variabele.
Alleen de stelling 'niet declareren van de variabelen' is voor de meesten niet weggelegd daar er direct de objectleden achter komen te staan (zeer handig hulpmiddel dus).

Alleen vind ik de schrijfwijze van .cells ipv. .offset maar zeer onoverzichtelijk. wil je offset(1,7) gebruiken wordt dit bij jullie .cells(2,8).
Rare schrijfwijze die ik in al die jaren nergens tegenkom of tegengekomen ben (en ik help op meerdere (inter)nationale fora).
Maar dat allemaal terzijde (straks lijkt mijn verhaal op die van de Ts; te langdradig voor mij).
 
@HSV

Ik heb mijn suggestie aangepast met offset ipv cells.
 
HSV en SNB dank voor jullie reactie. Ik zal de .Cells omzetten naar .Offset. Het gebruik van declaraties en variabelen, vind ik persoonlijk prettig. Wel kan ik hier voor in de toekomst eens over nadenken. Ook wist ik niet dat het niet declareren en gebruik van variabelen niet altijd nodig is. Dat kun je dus naar wat ik begrijp bereiken met die conversies (als ik het goed zeg).

Verder HSV, de lengte van mijn berichten, ja dat is discutabel en eerlijk gezegd ook een beetje een handicap. Buiten het feit dat velen zin hebben om dat allemaal te lezen, ben ik wat ik van mijzelf weet niet altijd kort van stof. Mede daarom mijn dank voor de aandacht en tijd die er dan toch is ingestoken.

Ik sluit dit topic af. Nogmaals bedankt.
 
Hoi,

Als je 'Option Explicit' weghaalt, of je zet er een apostrof voor, of je haalt het vinkje weg in de Opties → Editor hoef je de variabelen niet te declareren.
Een nadeel, je keuzelijstjes van de objectleden zijn verdwenen.
 
Hoi,

Als je 'Option Explicit' weghaalt, of je zet er een apostrof voor, of je haalt het vinkje weg in de Opties → Editor hoef je de variabelen niet te declareren.
Een nadeel, je keuzelijstjes van de objectleden zijn verdwenen.

Niet helemaal correct: als je with ... end with gebruikt werkt Intellisense even goed.
 
Kijk, dat wist ik niet.
Bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan