我在下面的链接中找到了一篇关于句子大小写函数的旧帖子。使用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