我在以下链接中找到了一篇关于句子大小写功能的旧帖子。 Converting to sentence case using 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 = "(^|[\.\?\!\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
我不明白的是如何使该函数对在特定单元格中键入的字符串进行句子大小写,然后将更正的句子放回原始单元格中。我不需要将其放在消息框中。类似于以下内容:
If Not Intersect(Target, myrange2) Is Nothing Then
Target.Value = ProperCaps(Target.Value)
End If
如有任何帮助,我们将不胜感激。请原谅我转发此内容,我无权评论帖子。
谢谢 加里
最佳答案
您的函数缺少最后一部分,但如果最后一部分只是多一行 End Function
那么您需要做的就是将 MsgBox strIn
替换为 >ProperCaps = 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 = "(^|[\.\?\!\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
End With
ProperCaps = strIn
End Function
关于Excel VBA 句子大小写函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31162554/