just put this together - Edit - missed a bit
Code:
Function properCase(str As String) As String
'could put these in a table
Const exception = "de,la"
Const delim = "-,'"
Dim e() As String
Dim d() As String
Dim i As Integer
properCase = StrConv(str, vbProperCase)
d = Split(delim, ",")
For i = 0 To UBound(d)
If InStr(str, d(i)) Then
properCase = Replace(StrConv(Replace(str, d(i), " " & d(i) & " "), vbProperCase), " " & d(i) & " ", d(i))
End If
Next i
e = Split(exception, ",")
For i = 0 To UBound(e)
If InStr(properCase, " " & e(i) & " ") Then
properCase = Replace(properCase, " " & e(i) & " ", " " & e(i) & " ")
End If
Next i
End Function
examples
?propercase("mercedes-benz de la rue")
Mercedes-Benz de la Rue
?propercase("o'brien")
O'Brien