Gå til innhold

Foto

Excel: Dato fra VBA vil ikke formateres og vises riktig


5 svar i denne tråden

#1 steinrawr

steinrawr

    Bruker

  • Medlemmer
  • 1 367 innlegg
  •   17. april 2006

Skrevet 23. september 2019 - 10:25

 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


  • 0

...


#2 trn100

trn100

    Bruker

  • Medlemmer
  • 4 941 innlegg
  •   21. september 2001

Skrevet 23. september 2019 - 11:13

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)

 

  • 1
"The true sign of intelligence is not knowledge but imagination"

#3 Harald Staff

Harald Staff

    Bruker

  • Medlemmer
  • 2 417 innlegg
  •   25. april 2005

Skrevet 23. september 2019 - 12:20

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


Dette innlegget har blitt redigert av Harald Staff: 23. september 2019 - 12:21

  • 0

#4 steinrawr

steinrawr

    Bruker

  • Medlemmer
  • 1 367 innlegg
  •   17. april 2006

Skrevet 23. september 2019 - 12:47

Heisann! 
 
Takk for nyttig innspill, men problemet er uavhengig av validering av datoen. 
 
Jeg la inn tekststrengen fra skjemaet i en Date-variabel nå, men det utgjør ingen forskjell på formateringen og hvordan regnearket forstår innholdet i cellen.
HYqfssh.png
  • 0

...


#5 steinrawr

steinrawr

    Bruker

  • Medlemmer
  • 1 367 innlegg
  •   17. april 2006

Skrevet 23. september 2019 - 12:53

OK: Så dette løste det for meg..

yPE5koP.png

 

Jeg la Date-variabelen rett inn som Value i cellen alene, i stedet for å ha med Format(Dt, "dd.mm.yyyy"). Da plukka den opp datoen som "dato" og gjorde den automatisk filtrerbar. 

 

Takk for innspillene og hjelpen! 


  • 0

...


#6 Harald Staff

Harald Staff

    Bruker

  • Medlemmer
  • 2 417 innlegg
  •   25. april 2005

Skrevet 23. september 2019 - 14:36

Bra du fant ut av det. "Format(Dt" gjør om datoen til String igjen. La regnearket håndtere formatering.

 

Beste hilsen Harald


  • 0


0 bruker(e) leser denne tråden

0 medlemmer, 0 gjester, 0 skjulte brukere