使用VBA转换为句子
我一直在谷歌上一页一页地搜寻,在这里寻找解决这个看似简单的请求,但无济于事。 有谁知道一个可靠的方式来使用vba将string转换为句子吗?
理想情况下,我将它构build到一个子而不是一个函数中,所以从GUI调用更容易。
作为参考,我会想要:
这是一个长而粗略的上面的句子。 请立即修改我。
成为:
这是一个长而丑陋的大写句子。 请立即修改我。
转换为标题案例我发现非常简单(因为有一个内置的function),但转换为刑事案件已经certificate确实很难。
我已经尝试了下面的一些方法,但是随时都会出现错误:
- http://www.vbforums.com/showthread.php?t=536912
- http://vbamacros.blogspot.com/2007/09/sentence-case.html
我怎样才能使这个工作?
您可以使用RegExp更高效地运行parsing
像这样的东西
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?)([az])" 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
感谢这一点,有用的代码。 为什么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) With objRegex .Global = True .ignoreCase = True .Pattern = "(^|[\.\?\!\r\t]\s?)([az])" 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)来删除string前后的所有空格(不更改句子大小写),而不考虑有多less空格。