Print side | Luk vindue

textbox værdi til dato

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=3158
Udskrevet den: 29.Apr.2024 kl. 08:32


Emne: textbox værdi til dato
Besked fra: Matlock
Emne: textbox værdi til dato
Posteringsdato: 12.Sep.2017 kl. 17:51
Hej Alle
Jeg har lavet en userform som kan lave nogle aftalesedler for mig. De bliver nummeret fortløbende 
Hvis jeg indtaster et aftalesedel nummer der allerede er lavet, genkalder den de gamle værdier, men Datoen bliver genkaldt som et tal ikke en dato.

Håber i kan hjælpe

Her er koden der driller
Private Sub txtAftale_AfterUpdate()
    
If WorksheetFunction.CountIf(sheet3.Range("D:D"), Me.txtAftale.Value) = 0 Then
    Me.txtAftale.Value = ""
    Exit Sub
    End If
    With Me
    .txtbesk = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 2, 0)
    .txtDato = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 7, 0)
    .txtVare1 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 8, 0)
    .txtPris1 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 9, 0)
    .txtVare2 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 10, 0)
    .txtPris2 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 11, 0)
    .txtVare3 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 12, 0)
    .txtPris3 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 13, 0)
    .txtVare4 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 14, 0)
    .txtPris4 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 15, 0)
    .txtVare5 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 16, 0)
    .txtPris5 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 17, 0)
    .txtVare6 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 18, 0)
    .txtPris6 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 18, 0)
    
    
    End With
End Sub

Private Sub UserForm_Activate()

txtDato.Text = Format(Now, "dd-mmm-yyyy")

End Sub



Svar:
Besked fra: EXCELGAARD
Posteringsdato: 12.Sep.2017 kl. 21:14
Jeg går ud fra, at det er denne linje:
.txtDato = Format(Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 7, 0), ""dd-mmm-yyyy)


-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: Ib Hansen
Posteringsdato: 13.Sep.2017 kl. 18:57

Jeg ved ikke om Excelgaards løsning virker, men jeg tror det ikke, da jeg mener anførselstegnenen står forkert omkring datoformatet i hans kode.
Skal datoformatet ikke ind imellem de to anførselstegn ??

.txtDato = Format(Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 7, 0), "dd-mmm-yyyy")


Men hvis den skal vise d.d. mangler koden så ikke også dobbelt parentes efter Now() ??
Private Sub UserForm_Activate()
   txtDato.Text = Format(Now(), "dd-mmm-yyyy")
End Sub


Eller måske skal koden bare ind i Update Sub'en i stedet, så den laver opdateringen hver gang der laves en ændring i userformen ??
Det er så vidt jeg kan se også Excelgaards løsning, men jeg har bare skilt de to txtDato koder ad.
Private Sub txtAftale_AfterUpdate()
    If WorksheetFunction.CountIf(sheet3.Range("D:D"), Me.txtAftale.Value) = 0 Then
    Me.txtAftale.Value = ""
    Exit Sub
    End If

    With Me
    .txtbesk = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 2, 0)
    .txtDato = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 7, 0)
    .txtDato = Format(Now(), "dd-mmm-yyyy")
    .txtVare1 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 8, 0)
    .txtPris1 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 9, 0)
    .txtVare2 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 10, 0)
    .txtPris2 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 11, 0)
    .txtVare3 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 12, 0)
    .txtPris3 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 13, 0)
    .txtVare4 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 14, 0)
    .txtPris4 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 15, 0)
    .txtVare5 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 16, 0)
    .txtPris5 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 17, 0)
    .txtVare6 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 18, 0)
    .txtPris6 = Application.WorksheetFunction.VLookup(CLng(Me.txtAftale), sheet3.Range("Lookup"), 18, 0)    
    End With
End Sub

Bare nogle forslag uden at være specialist Ermm


Besked fra: EXCELGAARD
Posteringsdato: 13.Sep.2017 kl. 19:08
Jeg er ikke enig  Smile

Men, lad os se, hvad Matlock vender tilbage med af tilbagemelding  Smile


-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: Ib Hansen
Posteringsdato: 13.Sep.2017 kl. 19:25
Citat: EXCELGAARD EXCELGAARD skrev:

Jeg er ikke enig  Smile

Men, lad os se, hvad Matlock vender tilbage med af tilbagemelding  Smile
 
Jeg troede at Matlock måske havde undladt at svare, fordi koden ikke virkede.
Og med min ringe VBA viden, anede jeg noget, der måske kunne være galt.

Men hvad ved jeg Disapprove
Det er jo dig, der er eksperten og kan lave koderne, uden at behøves at afprøve dem også ,hvilket jeg gerne ville, jeg også kunne.

-------------
Excel 2010 Dk og 2019 Dk på samme computer.
Bruger dog stadig mest 2010..
Men sådan er der jo så majet :o)


Besked fra: EXCELGAARD
Posteringsdato: 13.Sep.2017 kl. 19:44
Ja, jeg indrømmer, at jeg ikke har afprøvet denne der, da jeg ikke gad oprette en UserForm, med alle kontrollerne til formålet - den er oprettet direkte ud af hovedet.

Såååååå....
...måske får du ret  Geek

Men, tak for dine rosende ord  Embarrassed


-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: excelent
Posteringsdato: 13.Sep.2017 kl. 21:17
Jo Ib har ret, datoformatet skal omsluttes af anførselstegn
som i
txtDato.Text = Format(Now(), "dd-mmm-yyyy")


-------------
Jeg anvender Excel 2016 DK. Hvad anvender DU ? HUSK TILBAGEMELDING !!!


Besked fra: Ib Hansen
Posteringsdato: 14.Sep.2017 kl. 07:44
Jeg tænkte, at en dags dato kode i Excel er =NU() / =NOW()
Så det må også gælde i VBA.

Jeg er spændt på om det virker i Matlock's ark.


-------------
Excel 2010 Dk og 2019 Dk på samme computer.
Bruger dog stadig mest 2010..
Men sådan er der jo så majet :o)


Besked fra: EXCELGAARD
Posteringsdato: 14.Sep.2017 kl. 08:06
som jeg læser det, er det ikke nuværende tidspunkt, der er problemet, men når han overfører data til tekst boksen, der er problemet - og, så virker mit indspark.

Hvis det er dags dato, som han ønsker, så hedder funktionen i VBA, Date.
Format ( Date , "dd-mmm-yyyy" )



Besked fra: Ib Hansen
Posteringsdato: 14.Sep.2017 kl. 08:22
    UserForm1.TextBox1 = Format(Date, "dd. mmmm yyyy")
 eller
    UserForm1.TextBox2 = Format(Now(), "dd. mmmm yyyy")
 
Begge virker Wink
uploads/1125/Datoformat_i_Textbox.xlsm" rel="nofollow - Download


-------------
Excel 2010 Dk og 2019 Dk på samme computer.
Bruger dog stadig mest 2010..
Men sådan er der jo så majet :o)


Besked fra: EXCELGAARD
Posteringsdato: 14.Sep.2017 kl. 10:39
Citér [code]Begge virker
Korrekt...
Men funktionen 'Now' svarer til regnearksfunktionen '=NU()' og indeholder også tidspunkt,
mens funktionen 'Date' svarer til regnearksfunktionen '=IDAG()', og indeholder kun datoen.

Det er god programmeringsskik, at benytte 'Date', hvis man kun har behov for datoen, og 'Now', hvis man har behov for tidspunktet, for at gøre det lettere for læseren af koden, at se, hvad man benytter.


-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: Ib Hansen
Posteringsdato: 14.Sep.2017 kl. 11:13
Okay, det lyder fornuftigt.

Og formatet "dd-mm-yyyy", da textboxen ellers ville gengive det engelske 9/14/2017 med måneden først.
I stedet for det danske 14-09-2017 👍

Men så må du da i det mindste medgive, at din første kode, der slutter med formatet, er forkert.

Dine gåseøjne står foran datoformatet.
sheet3.Range("Lookup"), 7, 0), ""dd-mmm-yyyy)
Gåseøjnene skulle i stedet omslutte datoformatet.
sheet3.Range("Lookup"), 7, 0), "dd-mmm-yyyy")

Gad vide om Matlock kan finde ud af alt det her, når han engang kommer ind og ser tråden Unhappy




-------------
Excel 2010 Dk og 2019 Dk på samme computer.
Bruger dog stadig mest 2010..
Men sådan er der jo så majet :o)


Besked fra: EXCELGAARD
Posteringsdato: 14.Sep.2017 kl. 12:03
Nåååååh...
...det havde jeg slet ikke set - jo, naturligvis skal formatet stå inden for anførselstegn, men, mon ikke Matlock selv havde regnet det ud, da han jo selv har gjort det rigtigt længere nede - så han kender udemærket 'Format' funktioen - en tastefejl kan normale folk selv regne ud og se sig ud af  Smile




-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: Ib Hansen
Posteringsdato: 14.Sep.2017 kl. 12:10
Ja, hvis man ikke er VBA-idiot som mig.
Jeg kan bruge måneder på at sidde og kigge efter sådan en tastefejl LOL

Bare held og ikke dygtighed, den sprang mig i øjnene, som noget af det første, da jeg så koden.

Men jeg tror nu også Matlock kan regne den ud.
Ellers kan jo bare kigge på hele tråden, der efterhånden er blevet noget lang.

-------------
Excel 2010 Dk og 2019 Dk på samme computer.
Bruger dog stadig mest 2010..
Men sådan er der jo så majet :o)


Besked fra: Matlock
Posteringsdato: 19.Sep.2017 kl. 18:21
Tak for svaret. Det virkede perfekt.

Når man indtaster (NOW) genkalder den kun dagsdato og ikke og ikke den dato aftalesedlen var lavet.



Print side | Luk vindue