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 Ifeli 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 SubHeippa 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 SubGrez 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 Subkokeile 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.