2012-06-11 2 views
6

Google에서 페이지 뒤 페이지를 통해 트롤링했는데 여기 보이는 간단한 요청에 대한 해결책을 찾고 있지만 아무 소용이 없습니다. 누구든지 을 사용하여 문장을 대문자로 변환하는 신뢰할 수있는 방법을 알고 있습니까?VBA를 사용하여 문장 케이스로 변환

이상적으로 필자는 함수가 아닌 하위 함수로 빌드하므로 GUI에서 호출하는 것이 더 쉽습니다.

참고로, 내가 원하는 것 :

여기

긴, ​​UGLY 대문자 문장이다. 즉시 저에게 연락하십시오.

가되기 위해 : 여기

긴, ​​추악한 대문자 문장이다. 즉시 나를 고쳐주세요.

제목으로 변환 나는 매우 간단합니다.

나는 다음과 같은 몇 가지 방법을 시도했지만 굽이마다 오류와 함께 올라와있다 :

가 어떻게이 작업을 얻을 수 있나요?

+1

받은 첫 번째 링크는 예상대로 작동합니다. –

+1

죄송합니다. 나는 본질적으로 그것을 잘못 실행하고 있었다. 'Sub ConvertToSentenceCase() ActiveCell = SentenceCase (ActiveCell) End Sub' – seegoon

+3

다른 사람들이 당신의 문제가 해결되었다는 것을 (그리고 어떻게 해결했는지) 알 수 있도록 이것을 답변으로 (그리고 받아들이십시오) 네가 직접 해결했다면. :-) – JimmyPena

답변

7

당신은보다 효율적으로 구문 분석이이

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?)([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 
End Function 
+1

+1 RegExp를 잘 사용합니다. 첫 번째 문자를 대문자로 사용하지 않으므로 부차적 인 조정이 필요합니다. –

+0

@SiddharthRout thx Sid. 업데이트되었습니다 – brettdj

+1

이것은 절대적인 꿈을 이루어냅니다. – seegoon

1

감사와 같은

뭔가를 실행하기 위해 정규식을 사용할 수있는 코드의 유용한 비트. 왜 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?)([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 
     ProperCaps = strIn 
    End With 
End Function 

당신은 제거 모든 공백, 다시 수도로 첫 글자와 문장을 얻을 수 ProperCaps (Yourstring)를 호출 할 수 있습니다.

DblTrim (Yourstring)을 사용하여 몇 개의 공백이 있든 상관없이 문장 앞과 뒤에있는 모든 공백을 (문장의 대소 문자를 변경하지 않고) 제거 할 수 있습니다.