Ciao
Se non sbaglio quella è la funzione che ti avevo scritto qualche tempo fa...
L'errore deriva dal fatto che, se quando esegui lo split la stringa da usare come splitter si ripete di seguito (in questo caso si ripetono due spazi), nel risultato ottieni un array che contiene delle stringhe vuote. Per eliminare il problema basta aggiungere al metodo Split l'opzione StringSplitOptions.RemoveEmptyEntries:
Public Function GetNomeProprio(ByVal nome As String) As String
'Metto tutto in minuscolo e rimuovo gli spazi all'inizio e alla fine
nome = LCase(nome).Trim()
'Creo un array dove separo il nome dal cognome
Dim temp() As String = nome.Split(New Char() {" "}, _
StringSplitOptions.RemoveEmptyEntries)
Dim result As String = ""
For Each s As String In temp
'Inserisco come secondo carattere la lettera in maiuscolo
s = s.Insert(1, UCase(s(0)))
'Rimuovo il primo carattere (quello in minuscolo)
s = s.Remove(0, 1)
'Aggiungo la stringa al risultato
result += s + " "
Next
'Ritorno il risultato senza spazi all'inizio e alla fine
Return result.Trim()
End Function
Altrimenti, come suggeriva totti240282, potresti usare la Culture, e in particolare il metodo ToTitleCase della TextInfo, in questo modo:
Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(nome)
e in questo modo vengono anche lasciati gli spazi ripetuti.
Luca