Perhaps I still miss some features of an MS-Word's method. Please check/test. Any thought is welcome.
vb Code:
Public Function SentenceCase(sText As String) As String
Dim i As Long, bCap As Boolean, Ch As String * 1
SentenceCase = LCase(sText) '-- convert all to lowercase first
bCap = True
For i = 1 To Len(SentenceCase)
Ch = Mid$(SentenceCase, i, 1)
Select Case AscW(Ch)
Case 97 To 122 '-- a-z : separated and put on top as happens more often
If bCap Then
Mid$(SentenceCase, i, 1) = UCase(Ch)
bCap = False
End If
Case 33, 46, 63, 10, 13 '-- sentence terminators ! . ? Lf Cr
bCap = True
Case 32, 160, 9 '-- space, non-break space, tab
Case 34, 41, 93, 125, 148 '-- closing quotes or brackets
Case Is < 128 '-- other chars between 0-127
If bCap Then bCap = False
Case Else '-- Extended-Ascii (128-255) or Unicode (> 255)
If bCap Then
If StrComp(Ch, UCase(Ch), vbBinaryCompare) <> 0 Then
'-- a letter that has uppercase.
Mid$(SentenceCase, i, 1) = UCase(Ch)
End If
bCap = False
End If
End Select
Next
End Function