我在以下链接中找到了关于句子案例功能的旧帖子。 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
任何帮助将不胜感激。请原谅我转发这个,我没有被授权对帖子发表评论。
由于 加里
答案 0 :(得分:2)
您的功能缺少最后一部分,但如果最后一部分只是另一部分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