使用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空格。