usa questa routinecodice:Function Parte(Var As Variant, Index As Integer, Sep As String) As String ' --- Routine ritorna la parte della stringa passata in var ' avendo il carattere di separazione passato in Sep e il numero di ' campo di ritorno passato in index ' se ritorna Var=null passato qualcosa che non va ' Dim Passa As Variant Dim posto As Long Dim ini As Integer Dim PostoM As Long Dim MaxSegna As Long Dim a As Long Dim Iniziale As Integer Dim Finale As Integer Dim Uscita As String Passa = Var If Passa = "" Or IsNull(Passa) Or Index < 1 Then Parte = -1 Exit Function End If ' controllo se esiste il carrattere separatore cercato posto = 0 posto = InStr(Passa, Sep) If posto < 1 Then Parte = -1 Exit Function End If posto = 0: ini = 1: PostoM = 0: MaxSegna = 0 '-- controllo per quanti sono i segnaposto For a = 1 To Len(Passa) posto = 0 posto = InStr(ini, Passa, Sep) If posto > 0 Then ini = posto + 1 MaxSegna = MaxSegna + 1 End If Next If Index > (MaxSegna + 1) Then Parte = -1 Exit Function End If Iniziale = 1: posto = 0: Finale = 0: ini = 1 For a = 1 To Index posto = InStr(ini, Passa, Sep) If posto > 0 Then Finale = posto ' - 1 ini = posto + 1 If a = (Index - 1) Then Iniziale = posto ' + 1 End If posto = 0 End If Next ' determinare quanti caratteri è lungo il campo da recuperare Uscita = "" Select Case Index Case 1 Uscita = Trim(Left(Passa, Finale - 1)) Case Is = (MaxSegna + 1) Uscita = Trim(Mid$(Passa, Finale + 1)) Case Else Uscita = Trim(Mid$(Passa, Iniziale + 1, (Finale - (Iniziale + 1)))) End Select ' Normalizzazione di Uscita Uscita = Trim(Uscita) If Uscita = Sep Or Uscita = "" Then Uscita = " " End If Parte = Uscita End Function