Format Now() issue

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Beste allemaal,

Ik kom er even niet uit. Ik heb wel een gedachte welke ik aan het einde kenbaar zal maken.

Ik heb in een volledige code de volgende code staan.

Code:
Dim LogTijd as Date

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

Sheets("Blad1").Range("B7")= LogTijd

De code werkt wel, maar ik stuit op een kleinigheid. Zodra de LogTijd in de cel op het blad wordt geplaatst, krijg ik als volgt te zien: 18-7-2015 21:43 .

Wat ik eigenlijk wil zien is: 18-07-2015 21:43:22 . Volgens mij heb ik dit ook op dergelijke wijze via de Format gedaan. In een msgbox wordt het goed weergegeven, maar in de cel op het blad niet.

Nu mijn eigenlijke vraag. Klopt het dat dit niet geregeld kan worden via VBA en dat de enige manier is dat ik dan de celeigenschappen moet aanpassen. Dit lijkt mij alleen erg sterk.

Normaal doet enkel LogTijd = Now hetzelfde, maar omdat ik de uitkomst hier niet goed mee kreeg, heb ik de format erbij gezet. Toch werkt dit ook niet.

Of heb ik toch verkeerd gedeclareerd?
 
Laatst bewerkt:
Op jouw manier gaat het bij mij ook zoals je zegt. Probeer het eens zo:
Sheets("Blad1").Range("B7")=Format(Now(),"dd-mm-yyyy hh:mm:ss")

Dan werkt het bij mij zoals je het wil hebben. En het scheelt een variabele :)
 
Die wijze die had ik ook al geprobeerd en die werkt inderdaad, maar omdat deze gegevens meerdere malen wordt gebruikt, had ik besloten er uit gemak een variabele van te maken. Scheelt namelijk ook weer typewerk. Ik zal anders zo de volledige code hier even plakken. Wat ik net liet zien, is eigenlijk maar kort samengevat.
 
Dat zo duurt ietsje langer. Ik heb hier en daar zitten klooien zie ik daar ik ook aan het testen was met een andere variabele. Ik ben zo te zien nu zelf ook nog eens zaken door elkaar heen aan het gooien. Volgens mij werkt de alcohol weer iets te snel of wegens ouderdom kan ik er minder goed tegen??? :confused:
Ook staan er een aantal test msgboxen in om gegevens te controleren voordat deze geplaatst werden. Ook dit had een reden.

Ik ga dit even netjes maken en dan kom ik er op terug. Dat werken aan die andere variable staat los van het probleem wat ik hier postte.
 
Laatst bewerkt:
Beste Edmoor bij deze de volledige code. Er zijn nog een aantal aanpassingen te maken zoals de variabele voor de Sessieduur, UitlogTijd en vermoedelijk nog meer. Te vinden in Frm_Loggen onder de: Else 'UITLOGGEN. Je mag er wel naar kijken. 4 Ogen zien meer als 2, want volgens mij kan ik daar de UitlogTijd weglaten en er meteen LogTijd van maken.

Het formulier Loggen, wordt gebruikt voor 2 doeleinden. Namelijk het inloggen en het uitloggen. Ja ik weet het ik ben het wiel opnieuw aan het uitvinden, maar dat heeft ook andere redenen. Onder andere de wensen die de persoon voor wie ik bezig ben, heeft en mede doordat deze zelf tussendoor ook met wijzigingen komt. Dit kan betekenen dat voor sommige zaken vraagtekens kunnen bestaan.

Bepaalde aantekeningen die je vind zijn aantekeningen voor mijzelf om mij te herinneren.

Mocht je vanuit hier een voorbeeld willen hebben, dat kan, maar daar heb ik pas morgen tijd voor.

Onderstaande code staat in Module 1:

Code:
Public Gebruiker As String
Public Gebruikersnaam As String
Public LaatsteInlog() As String
Public Laatste_I_Datum As String
Public Laatste_I_Tijd As String
Public InlogOk As Boolean

Sub Logscherm()
    With Frm_Loggen
        If Not InlogOk And Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 7) = vbNullString Then InlogOk = True
        
        If InlogOk Then
            .Caption = "Uitlogscherm"
            .Tb_Gebruiker.PasswordChar = "*"
            
            If Gebruikersnaam <> vbNullString Then
                .Tb_Gebruiker.Value = Gebruikersnaam
            Else
                .Tb_Gebruiker.Value = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 2)
            End If
            
            .Tb_Gebruiker.Enabled = False
            .Cb_LogInOut.Caption = "Uitloggen"
            .Tb_Wachtwoord.SetFocus
        Else
            .Caption = "Inlogscherm"
            .Cb_LogInOut.Caption = "Inloggen"
        End If
            
        .Show
    End With
    
End Sub

Onderstaande code staat in het formulier: Frm_Loggen

Code:
Private Sub Cb_LogInOut_Click()
    Dim LastRow As Long
    Dim Lognummer As Long
    Dim GebruikerOk As Boolean
    Dim WachtwoordOk As Boolean
    Dim LogTijd As Date
    Dim InlogTijd As Date
    Dim UitlogTijd As Date
    Dim SessieDuur As Date
    Dim i As Long
    
    With Sheets("Gebruikers")
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
                
        For i = 2 To LastRow
            If Trim(Tb_Gebruiker) = Trim(.Cells(i, 1)) Then
                GebruikerOk = True
                
                If Trim(Tb_Wachtwoord) = Trim(.Cells(i, 2)) Then
                    WachtwoordOk = True
                    
                End If
            End If
                
            If GebruikerOk = True And WachtwoordOk = True Then
                LogTijd = Format(Now, "dd-mm-yyyy hh:mm:ss")

                Msgbox LogTijd 'Test

                If Not InlogOk Then 'INLOGGEN
                    InlogOk = True

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Aanpassen:
                    Lognummer = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Row

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

                    Gebruikersnaam = .Cells(i, 1)
                    Gebruiker = .Cells(i, 3)'

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Aanpassen: Variabele Laatste_I_Datum en Laatste_I_Tijd zijn mogelijk niet nodig bij andere schrijfwijze

                    If .Cells(i, 8) <> vbNullString Then
                        LaatsteInlog = Split(.Cells(i, 8)) 'Splitsen vorige inlogdatum en inlogtijd
                            Laatste_I_Datum = LaatsteInlog(0) 'Laatste Inlogdatum voor Frm_InlogID
                            Laatste_I_Tijd = LaatsteInlog(1) 'Laatste Inlogtijd voor Frm_InlogID
                    End If
                    
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                    
                    Sheets("Gebruikers").Select
                    .Cells(i, 7) = .Cells(i, 7) + 1 'Aantal maal login
                    .Cells(i, 8) = LogTijd
                    .Cells(i, 10) = "1" 'Status: Gebruiker Ingelogd
                        
                    Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 6) = Array(Lognummer, .Cells(i, 1), .Cells(i, 3), _
                        .Cells(i, 4), .Cells(i, 5), LogTijd)
                    Unload Me
                    Frm_InlogID.Show
                    
                    Exit Sub
                Else 'UITLOGGEN
                                            
                    InlogTijd = Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 6)
                    UitlogTijd = LogTijd 'Format(Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp).Cells(, 7), "dd-mm-yyyy "hh:mm:ss")
                    SessieDuur = UitlogTijd - InlogTijd
                        
                    .Cells(i, 9) = UitlogTijd
                    
                    .Cells(i, 10) = "0" 'Status: Gebruiker Uitgelogd
                    
                    With Sheets("LogFile").Cells(Rows.Count, 1).End(xlUp)
                        .Cells(, 7) = UitlogTijd
                        .Cells(, 8) = Format(UitlogTijd - InlogTijd, "hh:mm:ss") 'Format(SessieDuur, "hh:mm:ss")
                    End With
                    
                    InlogOk = False
                    Unload Me
                    MsgBox "Beste " & Gebruiker & " U bent uitgelogd"
                    Gebruiker = vbNullString
                    Call Logscherm
                    Exit Sub
                End If
            End If
        Next i

        If Not GebruikerOk Then
            MsgBox ("U heeft een ongeldige gebruikersnaam ingevoerd." _
                & vbNewLine & vbNewLine & "Probeer opnieuw"), vbInformation
        Else
            If Not WachtwoordOk The
                MsgBox ("U heeft een ongeldig wachtwoord ingevoerd." _
                    & vbNewLine & vbNewLine & "Probeer opnieuw."), vbInformation
            End If
        End If
            
        If Not InlogOk Then
            Tb_Gebruiker = vbNullString
            Tb_Wachtwoord = vbNullString
            Tb_Gebruiker.SetFocus
        Else
            Tb_Wachtwoord = vbNullString
            Tb_Wachtwoord.SetFocus
        End If
    End With

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Ontwerpen: Code voor tijdelijke blokkade en definitieve blokkade bij 3 maal invoeren verkeerd wachtwoord bij gebruiker.

    'MsgBox ("Beste " & Tb_Gebruiker & "," _
     '   & vbNewLine & vbNewLine & "Omdat u meerdere malen een verkeerd wachtwoord heeft ingevoerd," _
      '  & vbNewLine & "bent u geblokkeerd om dit programma te gebruiken." _
       ' & vbNewLine & vbNewLine & "U dient contact op te nemen met de beheerder om uw blokkade te laten opheffen."), vbInformation


'0 = Uitgelogd
'1 = Ingelogd
'2 = Tijdelijke blokkade 15 minuten wachten dan door 3x invoer verkeerd wachtwoord. Daarna maximaal opnieuw 3 maal proberen.
'3 = Definitieve blokkade. 2 maal 3 x een verkeerd wachtwoord. Opheffing door beheerder.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Sub

Er bestaat nog een formulier, maar dat is nu niet belangrijk. De reden dat ik dit wel aangeef heeft te maken met een aantal variabelen die je mogelijk niet terugvindt.

Ik vraag mij dus echt af hoe ik dus de variabele LogTijd goed in de cellen kan plaatsen op de werkbladen.
 
Laatst bewerkt:
Dan doe je het toch zo (even alleen op je eerste posting en Edmoor's antwoord inzoemend)?
Sheets("Blad1").Range("B7")=Format(LogTijd,"dd-mm-yyyy hh:mm:ss")

Ik zie geen andere manier, eerlijk gezegd (natuurlijk kan ik er naast zitten).

Tijs.
 
Declareer jouw variabele LogTijd als String (of als Variant of niet...)
 
E v R. Dank je. Dat lost een deel van mijn probleem inderdaad op. Alleen dan weer een nieuw probleem met een string kun je niet rekenen. Ik moet de datatype dan weer veranderen om de Logtijd - InlogTijd te berekenen. Ik dacht dat dit was met Integer, maar dat werkt niet?

De InlogTijd wordt uit een cel gehaald op het werkblad. De LogTijd daarentegen komt weer uit Now.
 
Met Format maak je er toch een string van?
Rekenen met Date of met Double, pas bij wegschrijven (eventueel) aan Format denken
 
In je eerste bericht doe je dit:
Code:
Dim LogTijd as Date
LogTijd = Format(Now(),"dd-mm-yyyy hh:mm:ss")
Je declareert daar een variable als Date en vervolgens prop je daar een String in.
Waarom declareer je deze dan eerst als Date?

Edit:
Wat E v R zegt dus.
 
Laatst bewerkt:
Is het niet voldoende om eenmalig de kolommen waarin de datum en tijd moeten komen via celeigenschappen het juiste formaat te geven?

Of in code iets van
Code:
Range("..")=Now()
Range("..").NumberFormat="dd-mm-yyyy hh:mm:ss"
 
Is het niet voldoende om eenmalig de kolommen waarin de datum en tijd moeten komen via celeigenschappen het juiste formaat te geven?

Of in code iets van
Code:
Range("..")=Now()
Range("..").NumberFormat="dd-mm-yyyy hh:mm:ss"

:confused::shocked::mad::eek::evil:

Dat ik daar niet eerder aan gedacht heb.
 
Toch terugkomend op deze vraag.

Declareren als String zorgt er inderdaad voor dat ik op juiste wijze de gegevens kan wegschrijven naar de cellen. Echter met Strings kun je niet rekenen. Daar moet de boel voor worden aangepast. Met textboxen wist ik het wel en ik had dit allemaal opgeslagen op mijn vorige HDD, echter is deze naar het land der verloren Data. Mijn geheugensteun, indien nodig of terug te kijken, is dus foetsie.

Wat VenA al aangaf om via celeigenschappen te werken en ja dat werkt het wel, maar dit is wegens omstandigheden toch niet mijn wens. Ik wil het echt via VBA doen.


Korte beschrijving:

LogTijd wordt 2 maal gebruikt om de gegevens (Now) weg te schrijven. Bij inloggen (Gegevens gaan naar een cel in Kolom F), bij uitloggen (Gegevens gaan naar een cel in Kolom G). Dit over 2 verschillende tabbladen, maar op beide in een andere kolom. Daar de gegevens nu allemaal goed worden weggeschreven naar tabblad: Gebruikers, behandel ik enkel tabblad: LogFile, welke overigens ook goed werkt, maar waar de totaal ingelogde tijd (Sessieduur), niet wordt berekend.

Zodra men uitlogt wordt zoals hierboven aangegeven, gegevens via LogTijd weggeschreven om vervolgens de Sessieduur te berekenen. Hiervoor wordt de eerder weggeschreven waarde uit kolom F gehaald en als variabele: InlogTijd gedeclareerd. In kolom G wordt middels LogTijd de UitlogTijd weggeschreven en als zodanig een stukje verder weer als variabele gedeclareerd. Weer een stukje verder worden beide variabelen van elkaar afgetrokken, de Sessieduur, tenminste dat is de bedoeling. Deze uitkomst dient vervolgens naar kolom H te worden weggeschreven met als Format(xxxxx, "hh:mm:ss") alwaar het fout gaat.

Onderstaand alleen het stukje code waar het om gaat. De rest van de code is irrelevant en zodoende voor overzicht weggelaten.

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 = UitlogTijd - InlogTijd 'Werkt niet
                        
        .Cells(, 8) = SessieDuur 'Werkt niet
    End With

De variabele UitlogTijd is volgens mij zelfs overbodig en kan dus denk ik zelfs worden weggelaten daar de variabele LogTijd al volstaat.
 
Laatst bewerkt:
Wat ik niet begrijp is waarom je datum en tijd informatie als String gebruikt. Uiteraard kan je daarmee niet rekenen. Waarom gebruik je het niet als echte datum/tijd?

Daarnaast kan je natuurlijk ook dit doen:
Code:
.Cells(, 8) = Format(DateValue(UitlogTijd) - DateValue(InlogTijd), "dd-mm-yyyy hh:mm:ss")
 
Edmoor. Omdat ik anders niet de juiste notatie 01-01-2015 krijg. Ik krijg dan namelijk 1-1-2015. Vandaar het declareren als string.

Bedoel je met jou code, kijkende naar dat ik enkel alleen de tijd wil niet:

Code:
.Cells(, 8) = Format(DateValue(UitlogTijd) - DateValue(InlogTijd), "-hh:mm:ss")

In plaats van:

Code:
.Cells(, 8) = Format(DateValue(UitlogTijd) - DateValue(InlogTijd), "dd-mm-yyyy hh:mm:ss")

??
 
Ja, bijvoorbeeld. Dat Format uiterlijk kan je mee spelen wat je wil. Wat ik maar even wilde laten zien is de conversie van een string datum/tijd naar een echte datum/tijd waarde waar je mee kan rekenen. En dat is wat de DateValue functie doet.

En als je in het Excel werkblad dit als Datum/tijd cel eigenschap gebruikt: dd-mm-jjjj
heb je ook 01-01-2015
 
Edmoor, helaas. Ik heb jou code ingevoegd. De foutmelding volgt niet meer, maar er komt als volgt te staan.

kolom F: 27-07-2015 23:57:43 (Inlogtijd)
kolom G: 27-07-2015 23:57:52 (Uitlogtijd)

Uitkomst kolom H: 30-12-1899 00:00:00 (Sessieduur)

Hierbij heb ik nog even de de format: "dd-mm-yyyy hh:mm:ss", gebruikt.
 
Laatst bewerkt:
Datum en tijd moet je apart behandelen. Daarvoor gebruik je dan:
Code:
Format((TimeValue(Uitlogtijd) - TimeValue(Inlogtijd)), "hh:mm:ss")
 
Het declareren was feitelijk een idee van: E v R. Dat deed wat ik wilde. Zodoende ben ik hiermee doorgegaan met negatief resultaat. En nee ik wil juist niet de celeigenschappen gebruiken. Dit heeft redenen. Bijvoorbeeld omdat ik anders de gehele kolom de eigenschappen geef en dat is gezien en wat je niet in de code terugziet en waar ik ook nog mee bezig ben, dat diezelfde kolom weer veel lager weer een andere eigenschap moet krijgen. Het hele tabblad is dus in opzet variabel.

Of doe ik zo als gewoonlijk... weer eens moeilijk?:confused:
 
Als dergelijke gelijke cellen op meerdere plekken andere eigenschappen nodig hebben is er in het ontwerp al iets fout.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan