Gå til innhold

Excel: Dato fra VBA vil ikke formateres og vises riktig


steinrawr

Anbefalte innlegg

 Heisann. 

 

Jeg sitter litt fast i Excel...

 

Jeg bruker en datocelle for å sortere en tabell, men datoer lagt inn fra skjema i vba vil ikke formateres riktig. For å illustrere det veldig enkelt laget jeg en miniversjon av programmet mitt. Hvis du vil teste og se nermere på filen, finner du excel-filen her

 

Problemet

Problemet er at alle nye rader jeg legger til med VBA ikke inntar datoformat automatisk. Den eneste måten å komme rundt dette jeg har funnet til nå, er å klikke meg inn i hver enkelt datocelle, og trykke enter: Da skifter formateringen. 

 

I programmet denne funksjonen i utgangspunktet ligger er det også mulig å åpne en rad og endre innholdet, så hver gang innholdet blir endret, faller datoen tilbake til å ikke være "formatert som dato"... Utrolig irriterende. 

 

Hva kan jeg gjøre for å få cellene med datoer til å være konsekvent lesbare datoer, slik at de kan sorteres med filteret? 

 

Har prøvd å google, men jeg mangler nok noe engelsk produkt/stammespråk for å finne det jeg leter etter. 

 

zqOrvsv.png

Lenke til kommentar
Videoannonse
Annonse

Hei.
 
Først ville jeg ha laget en subrutine som sjekker at det som er tastet inn er en gyldig dato:

 

Private Sub skrivinndato_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If IsDate(Me.skrivinndato) Then
Me.skrivinndato = Format(Me.skrivinndato, "dd.mm.yyyy")
Else
MsgBox "Tast inn wen gyldig dato i formatet DD.MM.ÅÅÅÅ !",,
End If
End Sub

Når du skal skrive datoen til cellen, prøv:

Cells(i ,2).Value = DateValue(Me.skrivinndato.Value)

 
  • Liker 1
Lenke til kommentar

Hei

 

Problemet ditt er at du forutsetter at skrivinndato er en dato. Det er det ikke nødvendigvis, jeg gjetter på at det er en tekst, en String.

 

Hvis du konverterer med Datevalue så kan folk skrive inn på de fleste vanlige måter (det er mange). Prøv denne:

Sub Test()
Dim Dt As Date
Dim skrivinndato As String
On Error Resume Next
skrivinndato = InputBox("Skriv dato:", "Test")
Dt = DateValue(skrivinndato)
If Dt < DateSerial(2019, 1, 1) Then
    MsgBox "Ikke godkjent"
Else
    MsgBox Format(Dt, "dd.mm.yyyy")
End If
End Sub

Den skal spise ting som

1.9.2019

1.9.19

1.sept 2019

1.september

01.09.19

01.09.2019

osv osv, men ikke

01092019

20190901

 

Beste hilsen Harald

Endret av Harald Staff
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...