Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
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.
Medlem: 03.Feb.2010
Land: Danmark
Status: Offline
Point: 10330
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.
Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
Sendt: 11.Maj.2014 kl. 08:59
Hej Allan.
Hvad kan jeg sige - Det virker perfekt
Tusind tak
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 ?
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
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:
Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
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".
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.
...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.
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/
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"
Jeg har ikke brugt 'vaglfrie argumenter' i VBA overhovedet
Jo, du har 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 )
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.
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.
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
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.
Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
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 må nok erkende, at jeg ganske enkelt ikke fatter en bjælde af dit enorme regneark Det er simpelthen for stort og indviklet for mig - måske, hvis man var inde i materien
Når du laver ting, skal du nok tænke lidt mere i KISS-princippet
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.
Jeg må nok erkende, at jeg ganske enkelt ikke fatter en bjælde af dit enorme regneark Det er simpelthen for stort og indviklet for mig - måske, hvis man var inde i materien
Når du laver ting, skal du nok tænke lidt mere i KISS-princippet
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.
Du kan ikke oprette nye emner i dette forum Du kan ikke besvare beskeder i dette forum Du kan ikke slette dine beskeder i dette forum Du kan ikke redigere dine beskeder i dette forum Du kan ikke oprette afstemninger i dette forum Du kan ikke stemme i dette forum