none
Controllo carateri e numeri in una cella di userform

    Domanda

  • Buongiorno a tutti.

    Avrei bisogno di un aiuto.

    All'interno della mia userform ho una cella dove ho abilitato un controllo sulle cifre obbligatorie da immettere:

    Private Sub txtST_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Dim s As String
      Dim n As Long
         
          s = Me.txtST.Value
          If Len(s) = 0 Then Exit Sub
         
          If Len(s) <> 3 Then
            Cancel = True
          Else
            On Error Resume Next
            n = CLng(s)
            If Err.Number Then Cancel = True
            On Error GoTo 0
            If CStr(n) <> s Then Cancel = True
          End If
          If Cancel Then
            With Me.txtST
              .SelStart = 0
              .SelLength = Len(.Value)
            End With
            MsgBox "Immettere il numero del JIRA di 3 cifre", _
                   vbOKOnly Or vbExclamation, _
                   "ATTENZIONE"
          End If
      End Sub

    Ho bisogno del vostro aiuto per modificarla in odo tale che il controllo lo effettui sul seguenti 'mix' di caratteri e numeri che dovranno essere obbligatori:

    Lettera Lettera numero linea numero numero numero

    Esempio di come deve essere composto l'inserimento in questa cella: HD1-123

    Infine:

    E' possibile inserire doppio controllo?

    Nel senso che dovrà essere obbligatoriamente inserito i due segenti incroci:

    1.

    Lettera Lettera numero linea numero numero numero

    Esempio di come deve essere composto l'inserimento in questa cella: HD1-123

    2

    Lettera Lettera Lettera Lettera linea numero numero numero

    Esempio di come deve essere composto l'inserimento in questa cella: EASY-123

    Qualcosa diverso dalle due condizioni sopra verrà rifiutato con msg in pop up.


    Grazie mille in anticipo.
    Massimo

    lunedì 23 aprile 2018 12:00

Tutte le risposte

  • Salve.

    Nessuno riesce ad aiutarmi?

    per qualsiasi ulteriore dettaglio o chiarimento sono qui.

    Grazie a tutti!

    Massimo

    martedì 24 aprile 2018 10:08
  • Se usi una MaskedTextBox trovi la proprietà Mask per fare quello che ti serve.
    martedì 24 aprile 2018 12:47
  • Rispondo a lume di naso perché non riesco a seguire il codice.

    Il suggerimento di  BlueLed dovrebbe esserti  più che risolutivo altrimenti potresti usare le espressioni regolari con l'espressione tipo :"\D{4}-\d{3}|\D{2}\d{1}-\d{3}" che ti ritornerebbe sia 

    EASY-123

    HD1-123

    ma anche

    GFGF-612

    LH5-456   

    OVVERO

    Lettera Lettera numero linea numero numero numero

    Lettera Lettera Lettera Lettera linea numero numero numero

    Qualche infarinatura puoi trovarla qui

    Salute

    • Modificato CelestinoV mercoledì 25 aprile 2018 08:30
    martedì 24 aprile 2018 13:08
  • Buongiorno e grazie innanzi tutto.

    Purtroppo non sono pratico e mi rivolgevo a questo forum proprio per avere una risposta un po più 'definitiva'.

    Se qualcuno può aiutarmi dandomi una soluzione già implementabile ve ne sarei veramente grato.

    Max

    venerdì 4 maggio 2018 06:20
  • Personalmente sono approdato direttamente in dot net senza passare per il VB6. Ho risposto al tuo quesito perché pensavo ad una migrazione su VB.NET. Cerco di essere il più chiaro possibile senza sapere se puoi usare il codice. Ti consiglio caldamente di leggerti qualche cosa su:

    Se usi una MaskedTextBox trovi la proprietà Mask per fare quello che ti serve. Consigliato da BlueLed 

    comunque eccoti il codice completo

    Private Function ControllaCodice(Codice As String) As String
            ' minimo il codice deve contenere sette caratteri e deve contenere la linea
            ' HD1-123 Lettera Lettera numero linea numero numero numero per cui verifichiamo le due cose:
            If Codice.Length < 7 OrElse (Not Codice.Contains("-")) Then
                Return "Codice errato"
            End If
            ' ma noi vogliamo trovare:
            ' sia: HD1-123 Lettera Lettera numero linea numero numero numero  
            ' sia: EASY-123 Lettera Lettera Lettera Lettera linea numero numero numero 
            ' per cui dichiaro le corrispondenze che voglio trovare nella stringa
            Dim pat As String = "\D{4}-\d{3}|\D{2}\d{1}-\d{3}"
            ' dichiaro la regex con la corrispondenza che voglio ottenere
            Dim rgx As New System.Text.RegularExpressions.Regex(pat)
            ' e dove voglio conservarle
            Dim matches As System.Text.RegularExpressions.MatchCollection
            'Ottiene le corrispondenze nel testo
            matches = rgx.Matches(Codice)
            ' se la corrispondenza è stata trovata
            If matches.Count > 0 Then
                ' sicuramente è stato trovato un codice giusto
                Return matches(0).Value
            Else
                ' altrimenti il codice è sbagliato
                Return "Codice errato" ' Oppure messagebox.show("Codice errato") con Return =""
            End If
    
        End Function

     Dim codice As String = ControllaCodice(TextBox1.Text)

    Ciao


    • Modificato CelestinoV sabato 5 maggio 2018 10:34
    sabato 5 maggio 2018 10:33