Olen tekemässä ohjelmaa johon syötetään rekisterinumeroita. ajattelin että lisäisin tekstikenttään seuraavan koodin pätkän
Dim rek As String If ComboBox5.ListIndex = 1 Then If TextBox1.TextLength = 3 Then rek = TextBox1.text TextBox1.text = rek + "-" End If End If
eli kun teksti kenttään on syötetty kirjaimet sen jälkeen väliviiva tulisi itsestään siihen ja tällä koodilla se tuleekin, mutta kun alan pyyhkimään tekstiä pois kentästä niin se ei pyyhi kuin tuohon väliviivaan asti?? eli siis kuinka saan loputkin tekstit pois kenttästä??
Mod. lisäsi kooditagit.
Eräs ratkaisu ongelmaan olisi tehdä kaksi textboxia. Ensimmäiseen rekisterinumeron alkuosa ja toiseen loppuosa. Erotinmerkin voisi sitten lisätä erillisenä objektina. Tuollaisten merkkilisäysten kovakoodauksissa voi ilmentyä aika myöhemmin kaikenlaisia ikäviä ongelmia.
Mites tohon on tarkoitus naputella rekisterinumero A-123 ?
Moi Arto!
kokeile oheista koodia...
Private Sub TextBox1_Change() If ComboBox5.ListIndex = 1 And _ TextBox1.TextLength >= 4 And _ InStr(TextBox1.Text, "-") = 0 Then TextBox1.Text = Left(TextBox1.Text, 3) _ & "-" & Right(TextBox1.Text, _ TextBox1.TextLength - 3) Else 'Check_ListIndex End If End Sub 'Private Sub ComboBox5_Change() 'Check_ListIndex 'End Sub 'Private Sub Check_ListIndex() 'If ComboBox5.ListIndex <> 1 Then 'TextBox1.Text = "" 'End If 'End Sub
Heippa taas!
tohon on tarkoitus naputella rekisterinumero A-123 näin...
Private Sub TextBox1_Change() Check_ListIndex ComboBox5 If TextBox1.TextLength > 0 Then If Right(TextBox1.Text, 1) = "-" _ Or InStr(TextBox1.Text, "-") <> _ InStrRev(TextBox1.Text, "-") Then TextBox1.Text = Replace(TextBox1.Text, "-", "") End If End If If TextBox1.TextLength > 1 Then If IsNumeric(Left(TextBox1.Text, 1)) Then TextBox1.Text = "": Exit Sub End If If IsNumeric(Right(TextBox1.Text, 1)) _ And InStr(TextBox1.Text, "-") = 0 Then For i = TextBox1.TextLength To 1 Step -1 If Not IsNumeric(Mid(TextBox1.Text, i, 1)) Then TextBox1.Text = Left(TextBox1.Text, i) _ & "-" & Right(TextBox1.Text, TextBox1.TextLength - i) Exit For End If Next i End If hlpStr = TextBox1.Text For i = 1 To Len(hlpStr) Mid(hlpStr, i, 1) = UCase(Mid(hlpStr, i, 1)) Next i TextBox1.Text = hlpStr End If End Sub Private Sub ComboBox5_Change() Check_ListIndex ComboBox5 End Sub Private Sub Check_ListIndex(cbo As ComboBox) Select Case cbo Case ComboBox1 '... Case ComboBox2 '... Case ComboBox3 '... Case ComboBox4 '... Case ComboBox5 If cbo.ListIndex <> 1 Then TextBox1.Text = "" End If End Select End Sub
Grez kirjoitti:
Mites tohon on tarkoitus naputella rekisterinumero A-123 ?
niin tuota ei kyllä tullu tosiaan ajatelleeksi...
nyt kun vielä ymmärtäsin tuon nean tekemän koodin täysin...
itelläni tuo combobox5 sisältää auton kansallisuuden 1=FIN 2=EST 3=EST.
nii ja tähän samaan ohjelmaan liityen. ohjelmalla taytetään valmis kaavake jolle aion tulostaa tiedot. scannasin kys kaavakkeen ja laitoin formin tausta kuvaksi sen, että saan labelin oikealle kohdalle kaavakkeeseen. mutta kun tulostan formin se tekee sen suunnilleen 4x isompana kuin alkuperäinen scannattu kaavake?? kuinka saan kuvan koon kohdalleen??
Moikka taas Arto!
'alkuperäinen esimerkkisi: Dim rek As String 'Jos ComboBox5.ListIndex on erisuuri kuin 1... If ComboBox5.ListIndex = 1 Then 'niin tätä osaa ei käydä läpi... If TextBox1.TextLength = 3 Then rek = TextBox1.text TextBox1.text = rek + "-" End If End If
tässä hieman selvennystä...
Private Sub UserForm_Activate() 'esim. 'asetetaan muuttujan merkkijonoarvoksi 'kansallisuustunnuksia (erotetaan pilkulla) maat = "FIN,EST,SWE" 'jne. 'alusteataan merkkijonotaulukko Dim tunnukset() As String 'sijoitetaan merkkijon kansallisuustunnukset 'Split-funktion avulla taulukon alkioiksi 'käyttäen funktion erotinmerkkinä pilkkua tunnukset = Split(maat, ",") 'tyhjennetään ComboBox5.Clear 'asetetaan ComboBox5 listan ensimmäisen 'valinnan arvoksi merkkijono (listindex 0) ComboBox5.AddItem "VALITSE KANSALLISUUS" 'käydään laskurisilmukassa läpi mekkijonotaulukon 'alkiot ensimmäisestä viimeiseen... For i = 0 To UBound(tunnukset) 'ja lisätään laskurin kulloin osoittaman 'indeksin mukaan alkion arvo ComboBox5 'listalle (index 1 - alkioiden määrä) ComboBox5.AddItem tunnukset(i) Next 'tuhotaan mekkijonotaulukko Erase tunnukset 'asetetaan ComboBox5 ListIndex arvoon 0 'jollon näkyviin tulee: VALITSE KANSALLISUUS ComboBox5.ListIndex = 0 End Sub Private Sub TextBox1_Change() 'Jos ComboBox5.ListIndex on 0 If ComboBox5.ListIndex = 0 Then 'niin TextBox1 tyhjennetään, TextBox1.Text = "" 'ComboBox5 aktivoidaan ja poistutaan 'tästä aliohjelmasta. ComboBox5.SetFocus: Exit Sub End If 'jos TextBox1 sisältää tekstiä... '(tekstin pituus on suurempi kuin 0) If TextBox1.TextLength > 0 Then 'niin jos ensimmäinen merkki on - (miinus) 'tai tekstissä on 2 - (miinus) merkkiä If Right(TextBox1.Text, 1) = "-" _ Or InStr(TextBox1.Text, "-") <> _ InStrRev(TextBox1.Text, "-") Then 'niin poistetaan miinus merkit '(korvataan tyhjällä merkkijonolla) TextBox1.Text = Replace(TextBox1.Text, "-", "") End If End If 'jos TextBox1 tekstin pituus on suurempi, 'kuin yksi merkki... If TextBox1.TextLength > 1 Then 'niin, jos tekstin ensimmäinen merkki 'on numeerinen (0 - 9) niin TextBox1 tyhjennetään If IsNumeric(Left(TextBox1.Text, 1)) Then TextBox1.Text = "": Exit Sub End If 'jos TextBox1 tekstin oikeanpuoleisin merkki 'on numeerinene (0 - 9) ja TextBox1 teksti ei 'sisällä - (miinus) merkkiä If IsNumeric(Right(TextBox1.Text, 1)) _ And InStr(TextBox1.Text, "-") = 0 Then 'niin käydään TextBox1 merkit läpi laskurisilmukassa 'viimeisestä ensimmäiseen... For i = TextBox1.TextLength To 1 Step -1 'jos laskurin osoittama merkki ei ole numeerinen If Not IsNumeric(Mid(TextBox1.Text, i, 1)) Then 'niin asetetaan TextBox1 uudeksi tekstiarvoksi 'merkkijono joka muodostuu TextBox1 tekstin 'ensimmäisestä (vasemmalta) laskurin i osoittamaan 'kohtaan merkkijonossa & - (miinus) merkistä & 'TextBox1 tekstin oikeanpuoleisista merkeistä joiden 'määrä saadan vähentämällä laskurin (i) arvo koko TextBox1 'tekstin merkkimäärästä, jolloin kirjaimet & numerot 'erotetaan miinus merkillä ja poistutaan silmukasta... '(tapahtuu automaattisesti jos tekstissä on kirjaimia 'ja kirjaimen perään kirjoitetaan numeerinen merkki) TextBox1.Text = Left(TextBox1.Text, i) _ & "-" & Right(TextBox1.Text, TextBox1.TextLength - i) Exit For End If Next i End If 'asetataan apumuuttujan arvoksi TextBox1 teksti hlpStr = TextBox1.Text 'käydään apumuuttujan merkit läpi alusta loppuun 'laskurisilmukkassa... For i = 1 To Len(hlpStr) 'muunnetaan kulloinenkin merkki isoksi (UpperCase) 'jolloin apumuuttujan merkkijonon kirjaimet 'tulee automaattisesti isolla... Mid(hlpStr, i, 1) = UCase(Mid(hlpStr, i, 1)) Next i 'asetetaan TextBox1 tekstiarvoksi 'apumuuttujan merkkijono TextBox1.Text = hlpStr End If End Sub Private Sub ComboBox5_Change() 'Jos ComboBox5.ListIndex asetetaan arvoon 0 '(valitaan listan ensimmäinen arvo) If ComboBox5.ListIndex = 0 Then 'niin TextBox1 tyhjennetään.. TextBox1.Text = "" End If End Sub
kokeile asettaa Formin PictureSizeMode arvoksi: fmPictureSizeModeStretch & säätele formin kokoa
KIITOS NEA!!
täytyy paneutua tuohon koodin huomenissa ajan kanssa!
Aihe on jo aika vanha, joten et voi enää vastata siihen.