Excel VBA语句大小写函数



我在下面的链接中找到了一篇关于句子大小写函数的旧帖子。使用vba 转换为句子大小写

我碰巧喜欢bretdj 设计的以下功能

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 = "(^|[.?!rt]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

我想不通的是,如何让函数对在特定单元格中键入的字符串进行大小写,然后将更正后的句子放回原始单元格。我不需要把它放在留言框里。类似于以下内容:

If Not Intersect(Target, myrange2) Is Nothing Then
    Target.Value = ProperCaps(Target.Value)
End If

如有任何帮助,我们将不胜感激。请原谅我转发这篇文章,我无权对帖子发表评论。

谢谢Gary

您的函数缺少最后一部分,但如果最后一部分只是多一行End Function,那么您所需要做的就是用ProperCaps = strIn:替换MsgBox strIn


Option Explicit
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 = "(^|[.?!rt]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
    End With
    ProperCaps = strIn
End Function

最新更新