2012-06-11 10 views
6

का उपयोग कर वाक्य के मामले में कनवर्ट करना मैं Google पर पेज के बाद पृष्ठ के माध्यम से ट्रैवल कर रहा हूं और यहां इस प्रतीत होता है कि यह सरल अनुरोध का समाधान ढूंढ रहा है, लेकिन इसका कोई फायदा नहीं हुआ। क्या का उपयोग कर स्ट्रिंग को वाक्य केस में बदलने के लिए किसी को विश्वसनीय तरीका पता है?वीबीए

आदर्श रूप से मैं इसे एक फ़ंक्शन के बजाय उप में बनाउंगा, इसलिए जीयूआई से कॉल करना आसान है।

संदर्भ के लिए, मैं चाहता हूँ होगा:

यहाँ एक लंबे, बदसूरत अपरकेस वाक्य है। कृपया मुझे तुरंत आओ।

बनने के लिए:

यहाँ एक लंबे, बदसूरत अपरकेस वाक्य है। कृपया मुझे तुरंत संशोधित करें।

शीर्षक केस में कनवर्ट करना मुझे बेहद सरल मिला (क्योंकि इसके लिए एक अंतर्निहित कार्य है) लेकिन वाक्य के मामले में कनवर्ट करना वास्तव में वास्तव में मुश्किल साबित हुआ है।

मैं निम्न विधियों में से कुछ की कोशिश की लेकिन हर मोड़ पर त्रुटियों के साथ आए हैं:

मैं इस काम करने के लिए मिल सकता है?

+1

आपके द्वारा दिया गया पहला लिंक अपेक्षित काम करता है। –

+1

क्षमा करें, यह करता है। मैं अनिवार्य रूप से इसे गलत चला रहा था। एक सब के साथ हल किया गया: 'सब कन्वर्टटॉसेंटेंसकेस() 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 का अच्छा उपयोग। मामूली tweaking की आवश्यकता होगी क्योंकि यह पहले अक्षर को पूंजीकृत नहीं करता है। –

+0

@ सिद्धार्थ रूट थक्स सिड। अद्यतन – brettdj

+1

यह एक पूर्ण सपना काम करता है। – seegoon

1

धन्यवाद चलाने के लिए एक रेगुलर एक्सप्रेशन इस्तेमाल कर सकते हैं, कोड की उपयोगी बिट। वीबी के पास उचित मामला क्यों है और वाक्य का मामला बहुत अजीब नहीं है। मैंने इसे अपने उद्देश्य के लिए tweaked किया है, क्योंकि मूल के सामने एक जगह है, तो मूल पहले पत्र को कैपिटल नहीं करेगा, उम्मीद है कि आप मुझे कुछ बदलावों को साझा करने में कोई फर्क नहीं पड़ता।

वाक्य के प्रारंभ या समाप्ति पर किसी भी अवांछित रिक्त स्थान को हटाने के लिए, मैंने उपरोक्त से एक और फ़ंक्शन जोड़ा है जिसे ऊपर से कहा जाता है।

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) का उपयोग भी कर सकते हैं, भले ही कितने रिक्त स्थान हैं।