Userform en datumnotatie USA en EU

Status
Niet open voor verdere reacties.

dirkbekkers

Gebruiker
Lid geworden
8 dec 2011
Berichten
12
Goedendag,

ik heb al vele berichten op internet gevonden over mijn probleem. Echter weet ik niet welke oplossing ik moet toepassen.


Ik heb een userform. De user voert in 2 textboxen datums in met formaat dd-mm-yyyy. Het formaat van de cel is als volgt gedefinieerd:
Code:
t3.Value = Format(t3.Value, "dd/mm/yyyy").
Daarna check ik of het een geldige datum is:

Code:
Private Sub T3_exit(ByVal Cancel As MSForms.ReturnBoolean)

    If t3.Text <> "" Then
        If IsDate(t3.Text) Then
            t3.Text = Format(t3.Text, "dd/mm/yyyy")
        Else
            MsgBox "Vul aub een geldige datum in!"
            Cancel = True
        End If
    End If
    
    If t3.Value <> "" And t4.Value <> "" And t14.Value <> "" And t16.Value <> "" And t12.Value <> "" And t18.Value <> "" Then
    totaaltijdenwerkelijk
    totaaltijdengepland
    Else
    End If
end sub

En daarna sla ik de invoer op in een combobox:

Code:
Private Sub knop_opslaan_Click()
'  de knop 'opslaan' slaat de gewijzigde gegevens van een record op in de combobox 'keus'
'  als het om een nieuw record gaat (keus.listindex=-1) :
'     -  wordt het nummer in 'keus' in de eerste cel van het laatste record gezet
'     -  wordt een nieuw record aan combobox 'keus' toegevoegd en
'  de gegevens in de tekstvakken/invoerlijsten T1 t/m T35 worden ingelezen in overeenkomstige 'cellen' - keus.list(1,2) t/m keus.list(1,35) - van combobox 'keus'


 
    With keus
        If .ListIndex = -1 Then                                                             '   nieuw record
            .List(.ListCount - 1, 0) = .Value
            If .ListIndex = .ListCount - 1 Then .AddItem
        End If
        
        For j = 1 To UBound(.List, 2)                                                    '  zet de inhoud van de gegevensvelden in combobox 'keus'
            .List(.ListIndex, j) = Me("T" & j).Text
        
        Next
        End With
    
    knop_opslaan.Visible = False
    knop_cmdAdd.Visible = True
    knop_cmdAdd.Tag = " "
End sub

Als laatste voeg ik de gegevens in de combobox toe aan een worksheet:

Code:
Private Sub knop_cmdAdd_Click()

        Hide                                                                             '   verberg het invoerscherm
        
 With Sheets("database").Cells(1, 1)
        .CurrentRegion.Offset(1).ClearContents                                      '   verwijder de databasegegevens in werkblad 'database'
        .Offset(1).Resize(keus.ListCount, UBound(keus.List, 2) + 1) = keus.List     '  pas het gebied voor de gegevens aan, aan de inhoud van combobox 'keus' en zet ze daar
    End With
        
    DoorvoerenFormule
    
    ActiveWorkbook.Save                                                  '   bewaar het gewijzigde bestand
    
End Sub

Echter loop ik tegen het american-eu datum probleem aan. Ik heb het vermoeden dat ondanks dat ik het formaat dd-mm-yyyy meegeef vba het leest als mm-dd-yyyy. Dus ik lees dd-mm-yyy maar er staat mm-dd-yyyy en bij het de output naar de worksheet draait vba dat weer om naar europees. Dus dan staat het verkeerd om.

Ik weet niet vanaf welk moment VBA de datum als zijnde amerikaans ziet en weet dus ook niet waar ik mijn code moet aanpassen, of bij het opslaan in de combobox of bij het toevoegen aan mijn worksheet.

Als ik de gegevens uit de worksheet weer in de userform inlees dan pakt hij de datum op zoals hij in de worksheet staat.

note: dit gebeurt alleen bij dag 1 tm 12 omdat deze ook als maand gezien kunnen worden.

Alvast bedankt voor de genomen moeite! :D
 
Waarom geen comboboxen gebruikt waaruit de gebruiker een datum selecteert ?
Tekstvak en invoerkeuzevak lijkt mij dubbelop.

Wegschrijven naar een werkblad van datum doe je als datum met cdate() of als tekst, maar dan in het ISO formaat Format(date,"yyyy-mm-dd")
 
Laatst bewerkt:
hoi.

ik kan eventueel comboboxen toevoegen maar hoe zie je dat? 3 boxen per datum?

nu wordt een datum naar een worksheet geschreven maar die datum wordt ook opgehaald uit de worksheet. met bijbehorende kopteksten in de labela van het userform. hoe los ik dat op?
 
Plaats svp een voorbeeldbestand.
 
Laatst bewerkt:
Hoi snb,

Dat kán de invoer wel makkelijk maken, echter is het geen oplossing voor het probleem, als ik in de dropdown kies voor 5 maart 2013 : 05-03-2013 dan komt er in mijn excel sheet te staan 03-05-2013.
Als ik de regel dan weer in de database laad dan staat er wel weer 05-03-2013.
Daarnaast ga ik met deze datum rekenen. De formule rekent met values en niet met text. Dan dien ik daar nog een oplossing voor te vinden.

kon je niets met het door mij gestuurde bestandje?

Gr. Dirk
 
Laatst bewerkt:
Je had blijkbaar over mijn eerdere suggesties heengelezen ?

PS. kun je svp de taalfout (-rekend-) uit je bericht halen ?
 

Bijlagen

Laatst bewerkt:
de taalvaud is eruit.

Je oplossing ziet er prima uit maar je focust daar wel op 1 cell. Ik zal dus moeten loopen om dat op meerdere cellen toe te passen?


Als ik het goed heb wordt middels de volgende code alles als text in de combobox opgeslagen.

Code:
Private Sub knop_opslaan_Click()
'  de knop 'opslaan' slaat de gewijzigde gegevens van een record op in de combobox 'keus'
'  als het om een nieuw record gaat (keus.listindex=-1) :
'     -  wordt het nummer in 'keus' in de eerste cel van het laatste record gezet
'     -  wordt een nieuw record aan combobox 'keus' toegevoegd en
'  de gegevens in de tekstvakken/invoerlijsten T1 t/m T35 worden ingelezen in overeenkomstige 'cellen' - keus.list(1,2) t/m keus.list(1,35) - van combobox 'keus'

    With keus
        If .ListIndex = -1 Then                                                             '   nieuw record
            .List(.ListCount - 1, 0) = .Value
            If .ListIndex = .ListCount - 1 Then .AddItem
        End If
        
        For j = 1 To UBound(.List, 2)                                                    '  zet de inhoud van de gegevensvelden in combobox 'keus'
            .List(.ListIndex, j) = Me("T" & j).Text
        
        Next
        End With
    
    knop_opslaan.Visible = False
    knop_cmdAdd.Visible = True
    knop_cmdAdd.Tag = " "
End Sub

Moet ik daar dan de Cdate functie nog toevoegen?
of voeg ik dat toe bij de code voor het toevoegen van de inhoud van de combobox aan de worksheet:

Code:
Private Sub knop_cmdAdd_Click()

        With Sheets("database").Cells(1, 1)
        .CurrentRegion.Offset(1).ClearContents                                      '   verwijder de databasegegevens in werkblad 'database'
        .Offset(1).Resize(keus.ListCount, UBound(keus.List, 2) + 1) = keus.List     '  pas het gebied voor de gegevens aan, aan de inhoud van combobox 'keus' en zet ze daar
              
    End With
     activeWorkbook.Save                                                  '   bewaar het gewijzigde bestand
    
End Sub
 
Waarom maak je geen gebruik van de geboden suggesties ?
 
Dat doe ik wel maar als ik een keuzelijst/dropdown box toevoeg zoals je voorstelt dan wordt de datum nog steeds omgedraaid.
 
Laatst bewerkt:
dus de vraag is waar ik dat Cdate stuk moet gaan toevoegen om een juiste output te krijgen...
 
Opgelost,

ik heb een exit event voor de datum velden om te checken of het wel een datum is. Als ik daar het formaat dd/mmmm/yyyy ipv dd/mm/yyyy toe ken dan ontstaan er geen fouten. er kan dan immers ook geen misverstand ontstaan over wat de maand is en wat de dag.

Bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan