Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Excel tekstikenttä ongelma

Sivun loppuun

Arto [28.02.2011 07:12:02]

#

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.

kaviaari [28.02.2011 09:34:32]

#

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.

Grez [28.02.2011 11:10:46]

#

Mites tohon on tarkoitus naputella rekisterinumero A-123 ?

neau33 [28.02.2011 12:59:50]

#

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

neau33 [28.02.2011 14:26:02]

#

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

Arto [28.02.2011 18:34:26]

#

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??

neau33 [28.02.2011 19:58:11]

#

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

Arto [28.02.2011 20:27:35]

#

KIITOS NEA!!
täytyy paneutua tuohon koodin huomenissa ajan kanssa!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta