Format Now() issue

Status
Niet open voor verdere reacties.
Ik trek hem bij deze toch nog een keer open.

Het is vandaag 1 augustus 2015.

Wat ik nu ineens weer zie begrijp ik niet. Ik krijg na wegschrijven onder Format(Now, "dd-mm-yyyy hh:mm:ss" nu ineens een cel niet te zien: 01-08-2015 04:48:44, maar 8-1-2015 04:48 ( De Amerikaanse opzet en hierbij zijn de seconden in de tijd weggevallen).

Het nog meer stomme is dat ik, na een beetje spelen erachter ben gekomen dat ik na een aantal keer aanpassen datum en tijd van mijn systeem en uitproberen dit probleem heb met datums vanaf de 1e van de maand tot en met de 12e van de maand. Vanaf 13 augustus 2015 krijg ik na wegschrijven in de cel dus weer netjes te zien: 13-08-2015 04:48:44.

De gebruikte code als hoe deze nu is:

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
 
Even kleine aanvulling en dan ga ik voor nu naar bed.

Ik heb in de code nu enkel de datatype van LogTijd van As String aangepast naar As Date.

Nu zie ik na wegschrijven in de cel: 1-8-2015 05:18.

Echter dit moet nog steeds volgens de format Logtijd 01-08-2015 15:18:34 zijn. Alleen dat komt er niet te staan.

Ik ga voor nu even plat. Tis al weer erg laat, zeg maar gerust vroeg, geworden.
 
Laatst bewerkt:
Als string gedeclareerd krijgt het bij mij een negatieve waarde retour (#########).
Code:
Dim LogTijd As Date
1-8-2015 17:07:33 - 27-07-2015 23:25:04 → 113:42:29
 
Sorry HSV ik zit nu niet het berekeningsgedeelte. Dat is tot zover opgelost. Tenzij dit gedeelte weer moeilijk gaat doen na een aanpassing.

De variabele Logtijd krijgt als waarde Now. Echter als ik het op die wijze invoer en declareer als Date, dan ik na wegschrijven 1-8-2015 05:18.

Dit moet dus zijn: 01-08-2015 05:18:34 zijn. Dit was eerst goed totdat deze dus naar 1 augustus ging. Toen werd het 8-1-2015.... De Amerikaanse wijze. Aangepast naar Date en toen was deze weer goed, alleen de schrijfwijze klopt nu dus niet meer.
 
Een tijd/datum in Excel is een getal.

Als je Excels ingebouwde spelbreker (die denkt dat er buiten de Verenigde Staten in de wereld geen landen zijn die ertoe doen) wil vermijden schrijf je een datum (=getal) weg in de small endian ISO-vorm yyyy-mm-dd (format(getal,"yyyy-mm-dd") ) of converteer je het getal naar een date die Excel wel herkent: cdate(getal).
 
Snb, Bedankt. Om te voorkomen dat ik dan telkens de format(logtijd, "dd-mm-yyyy hh:mm:ss") in moet voeren of telkens .offset() of .cells() .numberformat = "dd-mm-yyyy hh:mm:ss", heb ik gepoogd dat te ondervangen in de variabele: LogTijd=Format(Now, "dd-mm-yyyy hh:mm:ss"). Dat kan kennelijk dus niet op deze wijze. Dus dan gaan we met .NumberFormat werken. Op zicht geen probleem, maar dan loop ik wel tegen een klein iets aan.

Code:
 Sheets("Gebruikers").Select
    .Cells(i, 7) = .Cells(i, 7) + 1
    .Cells(i, 8) = LogTijd
    .Cells(i, 8).NumberFormat = "dd-mm-yyyy hh:mm:ss"            
    .Cells(i, 10) = "1" 'Status: Gebruiker Ingelogd
    Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 6) = Array(Logregel, .Cells(i, 1), .Cells(i, 3), _
        .Cells(i, 4), .Cells(i, 5), LogTijd)

De LogTijd in de laatste regel moet dan dus ook die .NumerFormat krijgen. Eventueel kan deze waarde ook gevuld worden met .Cells(i, 8).
 
Laatst bewerkt:
Na een ingeving kom ik uit op:

Code:
    Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 6) = Array(Logregel, .Cells(i, 1), .Cells(i, 3), _
        .Cells(i, 4), .Cells(i, 5), LogTijd)
    Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Offset(, 5).NumberFormat = "dd-mm-yyyy hh:mm:ss"

Kan de laatste regel in de regel ervoor in LogTijd worden verwerkt of is dit de wijze?

De .cells() ga ik straks weer veranderen in .offset(). Had het de vorige keer niet in deze hoedanigheid op kunnen slaan daar VBA vast liep.
 
Laatst bewerkt:
Werkt het zo voor je?
Code:
Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 6) = Array(Logregel, .Cells(i, 1), .Cells(i, 3), _
        .Cells(i, 4), .Cells(i, 5), format(LogTijd,"dd-mm-yyyy hh:mm:ss"))
 
Hoi HSV. Die had ik al geprobeerd. Dat stukje dat wist ik wel. Echter met LogTijd As Date of As String gedeclareerd, levert dit in de cel als volgt op: 8-4-2015 19:48 (de Amerikaanse indeling).

Dus helaas nee dit werkt niet. Dit was voor zover ik kwam de enige manier om het werkend te maken. Ik was nieuwsgierig hoe numberformat in een dergelijke opzet te gebruiken. Kennelijk is numberformat en Format niet helemaal hetzelfde. Tenminste zij doen wel hetzelfde, maar numberformat is meer op de celeigenschappen van een cel gericht. Immers bij een opname voor een macro code krijg je ook geen Format te zien als je wegschrijft naar een cel met een bepaalde numberformat.

Dus wat ik mij afvraag is nu dus wat ik al aangaf. Hoe numberformat op bovenstaande wijze gebruiken of is dit met mijn ingeving reeds opgelost. Daarnaast wanneer numberformat en wanneer format. Ik heb namelijk altijd format gebruikt, wat volgens mij altijd al zijn werk heeft gedaan. Ik heb deze alleen nog niet gebruikt met een variabele as Date. Het lijkt wel alsof deze een gedeeltelijk andere gebruiksaanwijzing kent bij een handmatige conversie.

Hierna sluit ik dit topic definitief. Immers ik denk niet dat we verder komen met een oplossing en zeer zeker niet als de oplossing er naar alle waarschijnlijkheid dus al is.
 
Laatst bewerkt:
Als je in VBA een datum in een variabele wil gebruiken declareer hem dan als Variant (en dat is dan meteen overbodig omdat iedere variabele zonder declaratie automatisch een variant is) of als 'Double' (een getal dus)
Code:
Sub M_snb()
'   Dim t1 As Double, t2 As Double, t3 As Double
   
   t1 = Now - 2.12
   t2 = Now
   t3 = t2 - t1
   Cells(1) = t3
   Cells(1).NumberFormat = "0.0000000"
   Cells(2, 1) = t3
   Cells(2, 1).NumberFormat = "[h]:mm:ss"
   
End Sub

Wellicht ten overvloede: Format in VBA heeft niets te maken met de eigenschap .numberformat van een cel/range in Excel.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan