在Excel中使用额外规则的正确大小写

我已经用Excel中的正确大小写vba,但我需要添加一个例外规则,以节省大量的手动编辑。 我需要“ – ”之后的第一个字母也是大写,例如:“Michael-jordan”现在变成了“Michael-jordan”。 我需要“迈克尔 – 乔丹”成为“迈克尔 – 乔丹”。

这里是我的代码:我的代码中也有“von”,“af”和“de”的例外。

Sub ProperCase() Dim rng As Range 'Use special cells so as not to overwrite formula. For Each rng In Selection.SpecialCells(xlCellTypeConstants, xlTextValues).Cells Select Case rng.Value Case "von", "af", "de" rng.Value = StrConv(rng.Value, vbLowerCase) Case Else 'StrConv is the VBA version of Proper. rng.Value = StrConv(rng.Value, vbProperCase) End Select Next rng End Sub 

代替

 rng.Value = StrConv(rng.Value, vbProperCase) 

使用

 rng.Value = WorksheetFunction.Proper(rng.Value) 

虽然这并不认为像Thomas Inzina所提到的don't doesn't情况。

这是我从这个职位回答的副本。 它应该很好地为你工作。

我在“文章标题”中使用“大写规则”作为创build大写exception列表的参考。

Function TitleCase使用WorksheetFunction.ProperCase预处理文本。 出于这个原因,我把一个例外的收缩,因为WorksheetFunction.ProperCase不正确地大写它们。

每个句子中的第一个单词和双引号之后的第一个单词将保持大写。 标点符号也正确处理。

 Function TitleCase(text As String) As String Dim doc Dim sentence, word, w Dim i As Long, j As Integer Dim arrLowerCaseWords arrLowerCaseWords = Array("a", "an", "and", "as", "at", "but", "by", "for", "in", "of", "on", "or", "the", "to", "up", "nor", "it", "am", "is") text = WorksheetFunction.Proper(text) Set doc = CreateObject("Word.Document") doc.Range.text = text For Each sentence In doc.Sentences For i = 2 To sentence.Words.Count If sentence.Words.Item(i - 1) <> """" Then Set w = sentence.Words.Item(i) For Each word In arrLowerCaseWords If LCase(Trim(w)) = word Then w.text = LCase(w.text) End If j = InStr(w.text, "'") If j Then w.text = Left(w.text, j) & LCase(Right(w.text, Len(w.text) - j)) Next End If Next Next TitleCase = doc.Range.text doc.Close False Set doc = Nothing End Function 

这是一个小的VBA函数使用分裂至极应该做所需的工作:

 Function properCase(str As String) As String Dim splitStr() As String splitStr = Split(str, "-") Dim i As Integer For i = LBound(splitStr) To UBound(splitStr) Step 1 splitStr(i) = UCase(Left(splitStr(i), 1)) & Right(splitStr(i), Len(splitStr(i)) - 1) Next i properCase = Join(splitStr, "-") End Function 

当在工作表上轻松完成时,是否有理由在VBA中执行此操作?

 =PROPER("michael-jordan") 

根据需要返回Michael-Jordan