Dansk Regneark Forum
  Hjælp Hjælp  Søg i forum   Arrangementer   Opret ny bruger Opret ny bruger  Log ind Log ind


Emne lukketTving specifikt datoformat fra en Textbox

 Besvar Besvar
Forfatter
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Emne: Tving specifikt datoformat fra en Textbox
    Sendt: 10.Maj.2014 kl. 13:49
Først, jeg har et større regneark, der hænger sammen med en kalender funktion.
Hvis der tastes et forkert datoformat, ædelægges kalenderen.

Jeg forsøger derfor at tvinge en dato fra en UserForm TextBox, til at skrive et specifikt datoformat til kalenderen, uanset hvordan det tastes i TextBoxen.
Datoformatet til kalenderen skal være dd. mmm yyyy.

Når UserFormen genåbnes, skal datoformatet returneres til TextBoxen i dette specifikke format.

Det hele virker med forskellige separatorer i TextBoxen (bindestreg, skråstreg, komma eller helt uden separator), men når der bruges punktum går det galt.

Hvis der tastes et forkert datoformat i TextBoxen, skal den åbne en InfoBox, der henviser til et korrekt datoformat.

Download fra linket.

På forhånd tak.

Ib
Til top



Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 10.Maj.2014 kl. 14:05
Her kan det store regneark downloades.

Datofunktionen findes i Ribbon Indstil arket
Textboxene Ændr startdato + slutdato for køreplan.

For at vise Excels egen menu tastes Password = Bus (med stort B).

Note: Regnearket er ikke færdigt og mangler flere formler for at regne rigtigt.

Ib
Til top
Allan Se dropdown
Forum Admin
Forum Admin
Avatar
Forum Admin

Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
Direkte link til dette indlæg Sendt: 10.Maj.2014 kl. 22:21

Hej Ib,

Et løsningsforlag kunne være simpelthen at erstatte et evt. punktum med en bindestreg allerede under indtastningen af datoen.
På denne måde bliver datoer med punktum valide og skal ikke udløse en fejl.

I den simple udgave du uploadede her til forummet, kan du under UserForm1 i eventen for TextBox1_Change bruge dette i stedet:

Private Sub TextBox1_Change()
Dim Mydate As String
Mydate = Replace(TextBox1.Text, ".", "-", 1, Len(TextBox1.Text), vbTextCompare)
    Sheets(1).Range("D3").Value = Format(Mydate, "dd. mmm yyyy")
   
End Sub


Jeg har testet det og umiddelbart virker det som om at det klarer ærterne.

Kan det bruges?


//Allan

Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 11.Maj.2014 kl. 08:59
Hej Allan.

Hvad kan jeg sige - Det virker perfekt Big smile
Tusind tak Thumbs Up

Jeg har ikke ret meget forstand på koder og kiggede lidt på hvordan en celle formatteres, når en ubekendt skal indsættes og jeg kan se der brugers "havelåge".

Jeg prøvede derfor UserForm1.TextBox1.Value = Format(Sheets(1).Range("D3").Value, "##-##-####") men det virkede selvfølgelig ikke - Ha ha ha..

Nu jeg har dig, må jeg så stille et spørgsmål vedr. et problem det store vedhæftede regneark ?

Ib


Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 11.Maj.2014 kl. 16:11
Jeg vil prøve at overføre din kode til en ny kode.

Der skal skrives (kolon) for at tidspunktet vises rigtigt.
Jeg vil lave en Replace af 3 forskellige tegn til (kolon).

De 3 tegn jeg vil erstatte er (komma) og (punktum) og (semikolon).

Er det muligt at definerer 3 tegn i den samme VBA kode ?

Her er din kode med MyTime As String
Dim MyTime As String
MyTime = Replace(TextBox2.Text, ".", "-", 1, Len(TextBox2.Text), vbTextCompare)
Sheets(4).Range("D17").Value = Format(MyTime, "hh:mm")

Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
Direkte link til dette indlæg Sendt: 11.Maj.2014 kl. 18:04
Citat: Gnaske Gnaske skrev:

Jeg har ikke ret meget forstand på koder og kiggede lidt på hvordan en celle formatteres, når en ubekendt skal indsættes og jeg kan se der brugers "havelåge".
Jeg prøvede derfor UserForm1.TextBox1.Value = Format(Sheets(1).Range("D3").Value, "##-##-####") men det virkede selvfølgelig ikke - Ha ha ha..
Det er muliigt, at du ikke har så megen forstand på det, men du gør en ihærdig indsats, vil jeg mene Thumbs Up

Hvis det er fordi, du vil formatere ovenstående som en dato, skal du ikke benytte 'havelåger', men der-i-mod dato format symbolerne:
Format(Sheets(1).Range("D3").Value , "dd.mm.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.
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
Direkte link til dette indlæg Sendt: 11.Maj.2014 kl. 18:10
Citat: Gnaske Gnaske skrev:

Jeg vil lave en Replace af 3 forskellige tegn til (kolon).
Er det muligt at definerer 3 tegn i den samme VBA kode ?
Yeps, du skal benytte noget i denne stil:
Replace(Replace(Replace(Text, ",", ":"), ".", ":"), ";", ":")
...ret selv til, så det passer med din kode.
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.
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 11.Maj.2014 kl. 18:59
Hej Excelgaard

Af en eller anden grund laver den ikke replacement i cellen med semikolon.
Men det virker både med komma og punktum.

Kan du se en fejl i koden jeg har brugt nedenunder ?
Hvis det var en parantes-fejl, burde punktum heller ikke virke.

Dim MyTime As String
MyTime = Replace(Replace(Replace(TextBox2.Text, ",", ":"), ";", ":"), ".", ":", 1, Len(TextBox2.Text), vbTextCompare)
Sheets(4).Range("D17").Value = Format(MyTime, "hh:mm")

Ib
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 11.Maj.2014 kl. 19:16
Jeg har kigget på hvordan man Bruger-Formaterer en celle til et bestemt format og her så jeg at havelågen i flere tilfælde bruges til at erstatte "det tal man skriver".
[t]:mm;[Rød](#0);[Farve15]#0
_(kr.* #.##0,00_);_(kr.* (#.##0,00);_(kr.* "-"??_);_(@_)

I min naivitet prøvede jeg om havelågen også kunne bruges i VBA koden, for at tvinge cellen til at skrive bindestreg imellem tallene i datoen.
UserForm1.TextBox1.Value = Format(Sheets(1).Range("D3").Value, "##-##-####")

Hvo intet vover, intet vinder Ouch
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
Direkte link til dette indlæg Sendt: 11.Maj.2014 kl. 20:13
Hej igen,

For det første, så bør du helt afholde dig fra, at benytte de 'valgfrie' (optional) argumenter i funktioner, når deres standard (default) værdier alligevel er, hvad du ønsker.
Ellers bliver din kode alt for besværlig, at læse.

Hvis jeg laver en lille kode, der benytter...
MyTime = Replace(Replace(Replace("12;34", ",", ":"), ";", ":"), ".", ":")
...uden de valgfrie argumenter, så virker det hos mig.

Du kan genkende de valgfrie argumenter på, at de har firkantede klammer [omkring sig].
Start altid med, at lave din kode uden disse argumenter, og først, hvis det viser sig, at koden ikke virker, kan du begynde, at overveje, om du skal benytte disse argumenter.

For det andet, så tror jeg Allan har ret: Du vil vinde meget ved, at lave konverteringen allerede mens brugeren indtaster i UserFromen.
Og, du kan endda vinde en ekstra fordel ved dette, da du så kan teste for alle tegn, der ikke er tal, fremfor kun lige 2-3 stykker (hvad nu, hvis brugeren benytter skråstreg, "/", eller bindestreg, "-", til at adskille timer og minutter?).

For det tredije skal du passe alvorligt på med at henvise til dine regneark med deres indeks numre:
Sheets(x).Range...
...for, hvad nu, hvis brugeren bytter rundt på regnefølgen i regnearksfilen?!?
Så er regneark nummer 4, måske, pludselig nummer 2, og 2 er 6, og 7 er 1, o.s.v.
Og, hvad nu, hvis det pludselig (ved et uheld) er en anden regnearksfil, der er blevet den aktive workbook undervejs?!?!?!
Så, laver du måske MEGET uforudstete og kritiske ændringer i det helt forkerte regneark!!
Det allerbedste er, at henvise til dine faneblade/regneark, ved at benytte deres kodenavne, hvilket har den fordel, at de ALTID automatisk henvise til faneblade i ThisWorkbook, plus det har den fordel, at det er ligegyldigt, hvad brugeren gør med regnearkene (flytter rundt på dem, giver dem andre navne, m.m.) - koden vil altid virke...

Blot et par forslag og ideer...
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.
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 11.Maj.2014 kl. 21:44
Nu virker semikolon mærkeligt nok også her.
Min kode ser sådan ud og jeg har ikke ændret i den.
Private Sub TextBox2_Change()
    Dim MyTime As String
    MyTime = Replace(Replace(Replace(TextBox2.Text, ",", ":"), ";", ":"), ".", ":", 1, Len(TextBox2.Text), vbTextCompare)
    Sheets(4).Range("D17").Value = Format(MyTime, "hh:mm")
    Call Tast_Vagt_H1.Vagt_H1_Update_1
End Sub

Mht. om folk bytter rundt på fanebladene.
Jeg skjuler alt, når arket åbnes og eneste måde at 'komme ind bagved', er ved at have koden.
Men jeg var ikke klar over, jeg kunne kalde fanerne andet end deres Indexs Numre og jeg ved heller ikke hvordan jeg gør det.
Det må jeg prøve at finde ud af Confused

Mht. de 'vaglfrie argumenter', så var de bare et forhutlet forsøg i VBA koden.
Jeg ville prøve, om jeg selv kunne regne 'den ud' og det kunne jeg ikke !
Jeg har ikke brugt 'vaglfrie argumenter' i VBA overhovedet, men mange af celler i selve arket er brugerdefineret med disse [].

Koden skulle bruges i et dato felt og den lavede kun fejl , når jeg skrev punktum som seperator, men ikke skråstreg og bindestreg.
Derfor brugte jeg Allan's kode i dato indtastningen og den virkede.

Mit næste problem er at den returnere Engelsk dato når dd er 12 eller derunder.
Den opfatter dd som måneden og ikke datoen.
01-02-2014 bliver til 2. Jan 2014.
13-02-2014 bliver til 13. Feb 2014.

Jeg har vedhæftet mit store regneark.
Koden til at åbne Excels Ribbon er = Bus (med stort B).

Prøv at åbne 'Indstil Arket' fra Ribbon.
I 'Ændre startdatoen for køreplanåret' tastes 01-02-2014.
Se hvad den returnerer.
Prøv også at taste datoen på forskellige måder - 1-2-2014 - 1/2/2014 - 01.02/2014 osv.

I 'Indtast vagter' fra Ribbon, har jeg i linie 1 ud for 'Vagt 281' kun ændret koden  i 'Start tid' - 'Slut tid' - 'Pause'.
Det er ligegyldigt om man bruger ";" Semikolon "," Komma eller "." Punktum som seperator.

Der udover er der mange flere ting der skal rettes, men det arbejder jeg ihærdigt på Cry

Link til regneark
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
Direkte link til dette indlæg Sendt: 12.Maj.2014 kl. 08:27
Citér Nu virker semikolon mærkeligt nok også her.
Heh, heh - a glitch in the Matrix Cool
Citér eneste måde at 'komme ind bagved', er ved at have koden.
Ja, eller ved at låse regnearket op: www.excelgaard.dk/Bib/Password%20Cracker/ www.excelgaard.dk/Bib/Password Cracker/
Citér var ikke klar over, jeg kunne kalde fanerne andet end deres Indexs Numre
I en dansk Excel er kode navnene for arkene typisk, Ark1, Ark2, Ark3, o.s.v., og man henviser til ark, med deres kode navne i denne stil:
Ark1.Range("A1").Value = "EXCELGAARD"
Citér Jeg har ikke brugt 'vaglfrie argumenter' i VBA overhovedet
Jo, du har Smile
Alene i din brug af 'Replace' funktionen benytter du to valgfrie argumenter - se, hvordan du benytter funktionen uden valgfrie argumenter i et af mine indlæg længere oppe i tråden.

Med hensyn til dine andre problemer, så prøver jeg at finde tid til at kigge på dit regneark lidt senere i dag (hvis ikke andre kommer mig i forkøbet med et svar 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.
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 13.Maj.2014 kl. 06:41
Undskyld mit sene svar, men pga. min arbejdstid osv.

Replace.
Da jeg først lavede koden og indtastede i TextBoxen, overførte den semikolon til cellen, uden replace til kolon og lavede en debug fejl.
Men den virkede med comma og punktum, så det var ikke en fejl, med et forkert TextBoxnummer etc.

Da du herefter kiggede på min indsatte kode i forum og fortalte den virkede, kopierede jeg den retur herfra og så virkede den også med semikolon.
For mig står det hen i det uvisse, hvorfor den samme kode pludselig virkede.

Valgfrie argumenter
Du skriver jeg bruger 'valgfrie argumenter' i bl.a 'replace' og samtidig at de 'valgfrie argumenter' kendetegnes med firkant parantes [].

Det forstår jeg ikke, da jeg ikke mener at have brugt firkant parantes i nogle koder.
Jeg ved faktisk slet ikke, hvordan firkant parantes skal bruges !

Måske skulle jeg finde et VBA kursus et eller andet sted, så jeg forstår lidt mere af, hvad alt det her egentligt betyder Confused

Password Cracker
En kode cracker - Ha ha ha - Fantastisk !!
Den kan jeg faktisk selv bruge, da jeg har et par regneark fra Andy Pope, med nogle Ribbon koder, jeg godt vil ind og kigge på.

Men dem der skal bruge dette regneark er bare nogle bus chauffører, der først skal have lidt undervisning i overhovedet at åbne Excel, så en kode cracker kommer slet ikke på tale for deres vedkommende.
Hvis en nørd derimod vil ind og kigge på hvilket rod jeg har lavet, skal han være velkommen, men jeg tror slet ikke han kan finde hoved eller hale i det hele.
Jeg kan næsten ikke selv - Ha ha ha..

Omdøbning Faneblade
Jeg vil prøve at omdøbe alle mine faner og lave en replacement i VBA med 'søg og erstat', så jeg undgår Sheets(1), Sheets(2) osv.

Tak for alle de gode råd Smile

Ib
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
Direkte link til dette indlæg Sendt: 13.Maj.2014 kl. 07:49
Citat: Gnaske Gnaske skrev:

Måske skulle jeg finde et VBA kursus et eller andet sted, så jeg forstår lidt mere af, hvad alt det her egentligt betyder
Nu bor vi jo ikke mere end 15 km. fra hinanden, så det er da ikke helt utænkeligt, at vi kunne sætte os ned en eftermiddag, med en kop kaffe, over lidt Excel - visse ting er bare meget lettere, at forstå, og fange ideen af, når man lige får det vist i praksis - plus, at det kan være ret omfattende, at forklare i et forum, på skrift, hvad der kan vises på 10 sekunder i praksis...

Måske man skulle spørge den lokale VUF eller lignende om de ikke ville holde et VBA aftenskursus hen over vinteren, sammen med alle de andre kurser, de alligevel afholder...

...ikke, at jeg ville deltage, men for sådan nogle ildsjæle som dig Thumbs Up
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.
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 13.Maj.2014 kl. 13:43
Jeg vil meget gerne sætte mig ned med en god kop kaffe over lidt Excel og specielt mine mærkelige VBA koder Smile

Jeg prøvede forøvrigt at omdøbe mine faner og lave en søg og erstat I VBA.
Jeg prøvede Sheets(1).Select -> Kørte_Vagter.Select
Jeg prøvede også Sheets(1).Select -> Sheets(Kørte_Vagter). Select
Jeg prøvede også at lave ø om til o i begge ovenstående.

Det virkede selvfølgelig ikke og det viser nok bedst, hvordan jeg arbejder med koderne.
Jeg aner ikke hvad jeg laver, men prøver indtil det virker - Ha ha ha Angry
Måske skal fanerne bare kaldes dét de blev døbt i første omgang, Ark1, Ark2 osv.

Det ark jeg arbejde på her, er bare en light udgave af et større ark med mange flere funktioner og VBA koder.
Nu er der lavet så meget om i dette ark, at det ville være lettere at implementere det store ark i dette.
Spørgsmåler er om det er muligt at kopiere et helt faneblad, med tilhørende VBA koder og UserForme fra det store ark og over i eksempelvis dette ark ?

Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
Direkte link til dette indlæg Sendt: 17.Maj.2014 kl. 11:51
Hejsa...

Undskyld, at jeg først svarer nu (Bededags "ferie", min bare ...)

Jo, du kan let kopiere VBA-moduler, inkl. UserForms, mellem 2 regnearksfiler.

  1. Åbn begge regnesfiler og gå ind i VBE
  2. Klik med musen på det modul, du vil flytte, og hold muse knappen nede
  3. Før modulet, med musen op i VBA-projektet for den regnearkfil, du vil kopierer til.

That's it  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.
Til top
Ib Hansen Se dropdown
Guld bruger
Guld bruger
Avatar

Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Direkte link til dette indlæg Sendt: 18.Maj.2014 kl. 08:00
Jeg har hørt, men tvivler på det, at det på en eller anden måde var muligt at kopiere selve fanebladet i regnearket og dette ville også kopiere tilhørende VBA, men alle koder, UserForms osv.

Det er vel ikke muligt ?

------------
Jeg har lavet et ældre regneark, med en 'Afregnings del'.
Afregningsdelen består af rigtig mange UserForms og koder.

Nu kommer der et par grundlæggende og lidt dumme VBA spørgsmål.
Alle mine UserForms står under hinanden i en lang række.

Kan man, for overskuelighedens skyld lave mapper og en mappestruktur i f.eks. 'Forms', hvor de tilhørende UserForms til en bestemt funktion lægges i ?

Og hvis det er muligt, herefter flytte en hel mappe fra et VBA project til et andet ?

Jeg har vedhæftet mit gamle project.

Klik på Ribbon 'Afregn' og herefter på 'Juni'.
Et klik på datoerne vil flytte beløbene fra et faneblad til et andet og tilbage igen.
Det er denne funktion jeg godt vil have overført til mit nye project, på en men og overskuelig måde.

Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
Direkte link til dette indlæg Sendt: 18.Maj.2014 kl. 21:01
Hej igen,

Jeg må nok erkende, at jeg ganske enkelt ikke fatter en bjælde af dit enorme regneark Exclamation
Det er simpelthen for stort og indviklet for mig - måske, hvis man var inde i materien Question

Når du laver ting, skal du nok tænke lidt mere i KISS-princippet Lamp

Men, et spørgsmpl kan jeg dog svare på: nej, man kan ikke lave yderligere undermapper til sine moduler og userforms - endnu en grund til at holde dette på et overskueligt niveau...
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.
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
Direkte link til dette indlæg Sendt: 18.Maj.2014 kl. 21:02
Citat: EXCELGAARD EXCELGAARD skrev:

Hej igen,

Jeg må nok erkende, at jeg ganske enkelt ikke fatter en bjælde af dit enorme regneark Exclamation
Det er simpelthen for stort og indviklet for mig - måske, hvis man var inde i materien Question

Når du laver ting, skal du nok tænke lidt mere i KISS-princippet Lamp

Men, et spørgsmål kan jeg dog svare på: Nej, man kan ikke lave yderligere undermapper til sine moduler og userforms - endnu en grund til at holde dette på et overskueligt niveau...
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.
Til top
EXCELGAARD Se dropdown
Platin bruger
Platin bruger


Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
Direkte link til dette indlæg Sendt: 18.Maj.2014 kl. 21:03
Hmmm, hvad gik der lige galt med den dobbelt postering der ???

Nåh, du finder nok ud af det alligevel 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.
Til top
 Besvar Besvar

Skift forum Forum tilladelser Se dropdown

© 2010 - 2024 Dansk Regneark Forum - en del af Excel-regneark.dk