controllo presenza caratteri in stringa



  • controllo presenza caratteri in stringa
    di max (utente non iscritto) data: 23/09/2014 11:22:53

    Buongiorno a tutti,
    tramite una macro compongo il nome di un file excel inserendo due stringhe date da inputbox. Dovrei controllare che all'interno della stringa inserita non siano presenti all'interno i simboli: / * ? " < > |

    Qualcuno può indicarmi come fare???

    Vi ringrazio



  • di Lucas87 data: 23/09/2014 11:38:37

    Ciao
    Questo controlla quello che viene inserito in una inputbox..adattalo alla tua situazione
     
    arr = Array("/", "*", "?")  'inserisci i simboli
    tex = InputBox("Scrivi: ")
    For Each sim In arr
        If InStr(1, tex, sim) > 0 Then
            MsgBox "È presente: " & sim
            Exit Sub
        End If
    Next



  • di Zer0Kelvin data: 23/09/2014 13:13:57

    Ciao.
    Andrebbero aggiunti anche i due punti :



  • di Zer0Kelvin data: 23/09/2014 13:18:26

    PPS: la variabile arr è superflua; per indicare le virgolette occorre inserire 4 virgolette.
     
    tex = InputBox("Scrivi: ")
    For Each sim In Array(":","/","","|", "*","""", "?")
        If InStr(1, tex, sim) > 0 Then
            MsgBox "È presente: " & sim
            Exit Sub
        End If
    Next



  • di Lucas87 data: 23/09/2014 13:55:40

    Si lo so sono uno sprecone



  • di max (utente non iscritto) data: 23/09/2014 14:57:05

    Ciao, grazie mille per la risposta... ho inserito il codice nel mio contesto

    L1:

    istruttore = InputBox("Inserire COGNOME istruttore")


    For Each sim In Array(":", "/", "", "|", "*", """", "?", "<", ">", ":", ",", "?", "!", "£", "$", "%", "&", "(", ")", "=", "'", "^", ";", "-", "_")
    If InStr(1, istruttore, sim) > 0 Then
    errore = MsgBox("Non è possibile inserire simboli... hai inserito: " & sim, vbOKOnly, "Errore")
    GoTo istruttore
    Exit Sub
    End If
    Next

    La prima volta il controllo me lo fa e torna su col Goto e mi richiede il nome istruttore. Ma se lo faccio 2 volte mi da il seguente errore:


    Errore di run-time '10':

    Questa matrice è fissa o temporaneamente bloccata

    Scusate se approfitto della vostra gentilezza ma non so come uscirne



  • di Luca73 data: 23/09/2014 15:35:11

    Ciao a tutti
    se permettete io correggerei così (facendo uscire dal loop e poi rimandando all'inizio forse funzionaa cnhe con un ciclo do..loop until...).
    E' sicuramente più lunga ma funziona.

     
    L1:
    Istruttore = InputBox("Inserire COGNOME istruttore", "INSERIRE", trovato)
    trovato = ""
    For Each sim In Array(":", "/", "", "|", "*", """", "?", "<", ">", ":", ",", "?", "!", "£", "$", "%", "&", "(", ")", "=", "'", "^", ";", "-", "_")
        If InStr(1, Istruttore, sim) > 0 Then
            errore = MsgBox("Non è possibile inserire simboli... hai inserito: " & sim, vbOKOnly, "Errore")
            trovato = Istruttore
            Exit For
        End If
    Next
    If trovato <> "" Then GoTo L1
    
    
    






  • di Zer0Kelvin data: 23/09/2014 21:35:55

    Ciao.
    E visto che il goto (checchè se ne creda) non è quasi mai un buon alleato, possiamo proprio usare un ciclo do...loop.
    Se l'utente non inserisce nulla, il ciclo termina.

     
    Do
        istruttore = InputBox("Inserire COGNOME istruttore", "INSERIRE", trovato)
        ok = True
        If istruttore <> "" Then
            For Each sim In Array(":", "/", "", "|", "*", """", "?", "<", ">", ":", ",", "?", "!", "£", "$", "%", "&", "(", ")", "=", "'", "^", ";", "-", "_")
                If InStr(1, istruttore, sim) > 0 Then
                    MsgBox "E' stato inserito un carattere non consentito:  " & sim, , "Errore"
                    ok = False
                    Exit For
                End If
            Next
        End If
    Loop Until ok
    



  • di Luca73 data: 24/09/2014 08:19:00

    Ciao
    Concordo, io non uso mai i GoTo, mi complicano solo la vita (tranne nella gestione errori). lo avevo mantenuto per somiglianza con la macro di partenza...
    Una sola nota: Zer0Kelvin ha usato una variabile booleana per il controllo (chiamata ok) se usi tale sistema togli il default (chiamato trovato) nell' inputbox in quanto inutile.
    Io avevo usato "trovato" con un confronto a vuoto ipotizzando che l'inserimento d un carattere non voluto fosse un errore pertanto al secondo giro ti riproponeva il valore sbaglaito già presente in Inputbox per correggerlo.

    Ciao
    Luca