2010-07-21 17 views
5

में गलत वर्तनी मैं माइक्रोसॉफ्ट वर्ड में गलत वर्तनी के साथ काम कर रहा हूं। केवल कुछ गलत वर्तनी के साथ, स्पेलिंग एरर संग्रह तक पहुंचने से गड़बड़ी धीमी हो जाती है (कम से कम फॉर/नेक्स्ट या फॉर/प्रत्येक लूप के साथ)।माइक्रोसॉफ्ट वर्ड

क्या सूची में जाने के लिए कोई तरीका है (प्रतिलिपि बनाएं, प्रविष्टियों की प्रतिलिपि बनाएँ, संग्रह की गतिशील प्रकृति को रोकें) जल्दी से? मुझे बस एक सूची की आवश्यकता है, इसका स्नैप शॉट, और इसके लिए गतिशील या वास्तविक समय नहीं होना चाहिए।

+0

आप स्पेलिंग एरर संग्रह की वर्तमान सामग्री को किसी अन्य संग्रह में कॉपी क्यों नहीं कर सकते हैं जिसे आप आवंटित करते हैं? –

+0

गतिशील संग्रह को रोककर, जब तक आप विशेष रूप से इसकी जांच नहीं करते हैं, तब तक कुछ भी गलत वर्तनी नहीं होगी, उस समय आपको धीमे 'for/next' loops का मुद्दा होगा। मुझे लगता है कि मैं इस मुद्दे को समझ नहीं रहा हूं ... –

+0

यह बिल्कुल समस्या है। शुरू करने के लिए संरचना तक पहुंच निषिद्ध धीमी है। मुझे नहीं पता क्यों। मुझे संदेह है क्योंकि यह गतिशील है और हमेशा नए शब्दों के लिए दस्तावेज़ में देख रहा है। – ForEachLoop

उत्तर

5

यहां बताया गया है मैं बनाने और जाँच वर्तनी त्रुटियों अनुकरण होगा:

Sub GetSpellingErrors() 
    ''# Turn off auto-spellchecking 
    Application.Options.CheckSpellingAsYouType = False 
    ''# Set document 
    Dim d As Document 
    Set d = ActiveDocument 
    ''# Insert misspelled text 
    d.Range.Text = "I wantedd to beet hym uup to rite some rongs." 
    ''# Get spelling errors 
    Dim spellErrs As ProofreadingErrors 
    Set spellErrs = d.SpellingErrors 
    ''# Dump spelling errors to Immediate window 
    For spellErr = 1 To spellErrs.Count 
     Debug.Print spellErrs(spellErr).Text 
    Next 
    ''# Turn back auto-spellchecking 
    Application.Options.CheckSpellingAsYouType = True 
End Sub 

परीक्षण मेरी तरफ इस बहुत तेज चलता है, Word 2003 और Word में दोनों 2010 ध्यान दें कि यह आप छह वर्तनी त्रुटियों दे देंगे, नहीं चार। हालांकि "बीट" और "संस्कार" अंग्रेजी में शब्द हैं, लेकिन उन्हें इस वाक्य के संदर्भ में "गलत वर्तनी" माना जाता है।

Application.Options.CheckSpellingAsYouType = False पर ध्यान दें। यह स्वचालित वर्तनी त्रुटि का पता लगाने (लाल squigglies) बंद कर देता है। यह एक आवेदन-व्यापी सेटिंग है - केवल एक ही दस्तावेज़ के लिए नहीं - इसलिए सबसे अच्छा अभ्यास इसे वापस चालू करना होगा यदि अंत में उपयोगकर्ता अंत में किए गए शब्द की अपेक्षा कर रहा है।

अब यदि Word 2007/2010 में यह पता चल रहा है (यह 2003 और उससे पहले के लिए काम नहीं करता है), तो आप XML (WordprocessingML) में गलत वर्तनी वाले शब्दों को आसानी से पढ़ सकते हैं। यह समाधान सेट अप और प्रबंधित करने के लिए अधिक जटिल है, और वास्तव में केवल तभी उपयोग किया जाना चाहिए यदि आप प्रोग्राम के लिए वीबीए का उपयोग नहीं कर रहे हैं बल्कि एक्सएमएल खोलें। लिंक-टू-एक्सएमएल के साथ एक साधारण क्वेरी सभी गलत वर्तनी वाले शब्दों के आईनेमरेबल प्राप्त करने के लिए पर्याप्त होगी। <w:proofErr/> तत्व के प्रत्येक w:type="spellStart" और w:type="spellEnd" विशेषताओं के बीच आप XML के सभी .Value को डंप करेंगे। उपरोक्त उत्पादित दस्तावेज़ में WordprocessingML में यह पैराग्राफ है:

<w:p w:rsidR="00A357E4" w:rsidRDefault="0008442E"> 
    <w:r> 
    <w:t xml:space="preserve">I </w:t> 
    </w:r> 
    <w:proofErr w:type="spellStart"/> 
    <w:r> 
    <w:t>wa</w:t> 
    </w:r> 
    <w:bookmarkStart w:id="0" w:name="_GoBack"/> 
    <w:bookmarkEnd w:id="0"/> 
    <w:r> 
    <w:t>ntedd</w:t> 
    </w:r> 
    <w:proofErr w:type="spellEnd"/> 
    <w:r> 
    <w:t xml:space="preserve"> to </w:t> 
    </w:r> 
    <w:proofErr w:type="spellStart"/> 
    <w:r w:rsidR="003F2F98"> 
    <w:t>b</w:t> 
    </w:r> 
    <w:r w:rsidR="005D3127"> 
    <w:t>eet</w:t> 
    </w:r> 
    <w:proofErr w:type="spellEnd"/> 
    <w:r w:rsidR="005D3127"> 
    <w:t xml:space="preserve"> </w:t> 
    </w:r> 
    <w:proofErr w:type="spellStart"/> 
    <w:r w:rsidR="005D3127"> 
    <w:t>hym</w:t> 
    </w:r> 
    <w:proofErr w:type="spellEnd"/> 
    <w:r w:rsidR="005D3127"> 
    <w:t xml:space="preserve"> </w:t> 
    </w:r> 
    <w:proofErr w:type="spellStart"/> 
    <w:r w:rsidR="005D3127"> 
    <w:t>uup</w:t> 
    </w:r> 
    <w:proofErr w:type="spellEnd"/> 
    <w:r w:rsidR="005D3127"> 
    <w:t xml:space="preserve"> to </w:t> 
    </w:r> 
    <w:proofErr w:type="spellStart"/> 
    <w:r w:rsidR="005D3127"> 
    <w:t>rite</w:t> 
    </w:r> 
    <w:proofErr w:type="spellEnd"/> 
    <w:r w:rsidR="005D3127"> 
    <w:t xml:space="preserve"> some </w:t> 
    </w:r> 
    <w:proofErr w:type="spellStart"/> 
    <w:r w:rsidR="005D3127"> 
    <w:t>rongs</w:t> 
    </w:r> 
    <w:proofErr w:type="spellEnd"/> 
    <w:r w:rsidR="005D3127"> 
    <w:t xml:space="preserve">. </w:t> 
    </w:r> 
</w:p> 
+0

धन्यवाद! यह मेरे विचार से ज्यादा दिलचस्प हो रहा है। स्पेलिंग एरर तक पहुंचने की गति अधिक शब्दों के साथ बढ़ जाती है। और शब्दों की संख्या से परे। 2000 बार चिपकाए गए पांच गलत वर्तनी वाले शब्दों को लूप में प्रति शब्द लगभग 2 सेकंड तक पहुंचाया जाता है। मेरे दस्तावेज़ में, यह प्रति शब्द 20 - 33 सेकंड है। ऐसा लगता है कि वीबीए में काम नहीं किया जा सकता है। यह ओपनएक्सएमएल छोड़ देता है, जो मुझे लगता है कि हम फिर से बात करेंगे। जानकारी के लिए धन्यवाद। – ForEachLoop

संबंधित मुद्दे