steinrawr Skrevet 23. september 2019 Del Skrevet 23. september 2019 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. Lenke til kommentar
trn100 Skrevet 23. september 2019 Del Skrevet 23. september 2019 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 SubNår du skal skrive datoen til cellen, prøv:Cells(i ,2).Value = DateValue(Me.skrivinndato.Value) 1 Lenke til kommentar
Harald Staff Skrevet 23. september 2019 Del Skrevet 23. september 2019 (endret) 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 23. september 2019 av Harald Staff Lenke til kommentar
steinrawr Skrevet 23. september 2019 Forfatter Del Skrevet 23. september 2019 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. Lenke til kommentar
steinrawr Skrevet 23. september 2019 Forfatter Del Skrevet 23. september 2019 OK: Så dette løste det for meg.. 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! Lenke til kommentar
Harald Staff Skrevet 23. september 2019 Del Skrevet 23. september 2019 Bra du fant ut av det. "Format(Dt" gjør om datoen til String igjen. La regnearket håndtere formatering. Beste hilsen Harald Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå