6

我一直在谷歌上一页又一页地浏览,在这里寻找这个看似简单的请求的解决方案,但无济于事。有谁知道使用将字符串转换为句子大小写的可靠方法?

理想情况下,我会将它构建成一个子而不是一个函数,因此从 GUI 调用它更容易。

作为参考,我想要:

这是一个又长又丑的大写句子。请立即修改我。

成为:

这是一个长而丑陋的大写句子。请立即修改我。

转换为 Title Case 我发现非常简单(因为有一个内置函数),但转换为句子 case 确实非常困难。

我尝试了以下一些方法,但每次都出现错误:

我怎样才能让它工作?

4

3 回答 3

8

您可以使用 RegExp 更有效地运行解析

像这样的东西

Sub Tested()
    Call ProperCaps("HERE IS A LONG, UGLY UPPERCASE SENTENCE. PLEASE AMEND ME IMMEDIATELY." & vbCrLf & "next line! now")
End Sub

Function ProperCaps(strIn As String) As String
    Dim objRegex As Object
    Dim objRegMC As Object
    Dim objRegM As Object
    Set objRegex = CreateObject("vbscript.regexp")
    strIn = LCase$(strIn)
    With objRegex
        .Global = True
        .ignoreCase = True
         .Pattern = "(^|[\.\?\!\r\t]\s?)([a-z])"
        If .test(strIn) Then
            Set objRegMC = .Execute(strIn)
            For Each objRegM In objRegMC
                Mid$(strIn, objRegM.firstindex + 1, objRegM.Length) = UCase$(objRegM)
            Next
        End If
        MsgBox strIn
    End With
End Function
于 2012-06-12T10:20:40.140 回答
1

谢谢你,有用的代码。为什么VB有正确的案例而不是句子的案例很奇怪。为了我的目的,我已经对其进行了调整,因为如果前面有空格,原版不会将第一个字母大写,希望你不介意我分享我的一些更改。

为了删除句子开头或结尾的任何不需要的空格,我添加了另一个从上面调用的函数。

Public Function DblTrim(vString As String) As String
Dim tempString As String
tempString = vString

Do Until Left(tempString, 1) <> " "
   tempString = LTrim(tempString)
Loop
Do Until Right(tempString, 1) <> " "
   tempString = RTrim(tempString)
Loop

DblTrim = tempString

End Function

Public Function ProperCaps(strIn As String) As String
    Dim objRegex As Object
    Dim objRegMC As Object
    Dim objRegM As Object
    Set objRegex = CreateObject("vbscript.regexp")
    strIn = DblTrim(strIn)
    strIn = LCase$(strIn)

    With objRegex
        .Global = True
        .ignoreCase = True
         .Pattern = "(^|[\.\?\!\r\t]\s?)([a-z])"
        If .test(strIn) Then
            Set objRegMC = .Execute(strIn)
            For Each objRegM In objRegMC
                Mid$(strIn, objRegM.firstindex + 1, objRegM.Length) = UCase$(objRegM)
            Next
        End If
        ProperCaps = strIn
    End With
End Function

您可以调用 ProperCaps(Yourstring) 以将第一个字母作为大写字母取回句子,并删除所有空格。

您还可以使用 DblTrim(Yourstring) 删除字符串前后的所有空格(不改变句子大小写),无论有多少空格。

于 2017-02-28T13:15:47.663 回答
0

我知道这是一篇旧文章,只是一个使用内置函数的简短代码,供某人参考(这是不言自明的)。要删除多余的空格,如果需要,请使用修剪功能将整个文本换行。

Public Function SentenceCase(Text As String) As String
    SentenceCase = UCase(Mid(Text, 1, 1)) & LCase(Mid(Text, 2))
End Function
于 2021-06-30T11:54:44.577 回答