2013-03-14 8 views
6

के माध्यम से प्रदर्शित 'सेव एज़' संवाद को रद्द करते समय रन-टाइम त्रुटि मेरे पास एक मैक्रो है जो एक दस्तावेज़ को एक निश्चित तरीके से स्वरूपित करता है, और फिर ActiveDocument.Save का उपयोग करके इसे सहेजता है।वीबीए

हालांकि, कभी-कभी दस्तावेज़ पहले ही सहेजा नहीं जाता है, और कुछ मामलों में मैं इसे सहेजना नहीं चाहता हूं। दुर्भाग्य से, क्लिक करके 'रद्द करें' जब 'सहेजें' संवाद प्रदर्शित किया जाता है एक रन-टाइम त्रुटि (4198) खड़ी कर रहा है -

Command failed

किसी को भी पता है कि कैसे मैं इसे होने से रोक सकते हैं? धन्यवाद। यदि फ़ाइल पहले से सहेज लिया गया है या अब

1. टेस्ट नहीं
2:

+0

तो कुछ मामलों में आप 'SaveAs' को अनुमति देना चाहते हैं? – brettdj

+1

हां, यह उपयोगकर्ता तक होना चाहिए। धन्यवाद। –

+0

मैंने आपके संशोधित प्रश्न को संभालने के लिए अपडेट किया है। – brettdj

उत्तर

2

अपडेट किया गया। यदि फ़ाइल सहेजी गई है, तो फ़ाइल को सहेजने के लिए SaveAs संवाद दिखाने के लिए नियंत्रित प्रक्रिया का उपयोग किया जाता है, याको संभालने के लिए उपयोग किया जाता है

कोड

Dim bSave As Boolean 
If ActiveDocument.Path = vbNullString Then 
bSave = Application.Dialogs(wdDialogFileSaveAs).Show 
If Not bSave Then MsgBox "User cancelled", vbCritical 
Else 
ActiveDocument.Save 
End If 
+0

धन्यवाद @bredttdj, लेकिन मुझे डर है कि यह काम नहीं करता है। 'संकलित त्रुटि: अपेक्षित फ़ंक्शन या चर', '। सेव' को कोड के अपमानजनक टुकड़े के रूप में इंगित किया जा रहा है। –

+0

@ डेविडगार्ड जब कोड बिना किसी त्रुटि के मेरे लिए काम करता था, तो मुझे 'पथ' के अस्तित्व का परीक्षण नहीं करना चाहिए था जिसे 'सहेजा गया' नहीं था। Pls उपरोक्त कोड आज़माएं। – brettdj

+0

माफ़ी, मैं आपके कोड को गलत पढ़ता हूं। 'सहेजे गए' काम करते हैं, हालांकि मुझे डर है कि आपने मेरे प्रश्न का गलत व्याख्या किया है (अब इसे स्पष्ट करने के लिए संपादन)।कुछ बार उपयोगकर्ता सहेजे गए संवाद का उपयोग करके पहले सहेजे गए दस्तावेज़ों को सहेजना चाहेगा, और कभी-कभी ऐसा नहीं होगा। इसलिए दुर्भाग्यवश इसे छोड़ना अगर दस्तावेज़ पहले से सहेजा नहीं गया है तो यह विकल्प नहीं है। मुझे एहसास है कि मैं उपयोगकर्ता से पूछ सकता हूं कि क्या वे बचाना चाहते हैं, लेकिन फिर भी उन्हें 'रद्द' दबाए जाने का विकल्प मिलता है, इसलिए मैं वापस वर्ग में वापस आऊंगा। धन्यवाद। –

3

कुछ त्रुटि हैंडलिंग निर्देश जोड़कर निम्न प्रयास करें:

On Error Resume Next 'to omit error when cancel is pressed 
    ActiveDocument.Save 

If Err.Number <> 0 Then 'optional, to confirmed that is not saved 
    MsgBox "Not saved"  
End If 
On Error GoTo 0   'to return standard error operation 
+1

उत्तर के लिए धन्यवाद। जबकि मैं समझता हूं कि आप वीबीए में एक स्किप त्रुटियों को समझते हैं, मैं समझना पसंद करूंगा कि यदि संभव हो तो त्रुटि क्यों फेंक दी जा रही है, और इस तरह से इसके आसपास काम करें। हालांकि ऐसा करने के लिए यदि आवश्यक हो तो मैं इस विधि का उपयोग करूंगा। –

+0

मुझे क्या पता है कि वीबीए एक्सेल वीबीए में 'एप्लिकेशन.इंटरबॉक्स' के लिए रद्द करें बटन के साथ आपके उदाहरण या बहुत लोकप्रिय समस्या जैसे कुछ उपयोगकर्ता कार्यों के लिए सरल समाधान प्रदान नहीं करता है। इसलिए कुछ अन्य वीबीए कार्यान्वयन की पुन: गणना की जाती है ... –

+0

@kaz जबड़े यह गलत है, त्रुटि प्रबंधन के बिना एक सरल समाधान है। – brettdj

0
VSTO डेवलपर्स के लिए

, कृपया यहाँ

if (Globals.ThisAddIn.Application.ActiveDocument.Path == String.Empty) 
     { 
      Word.Dialog dlg; 
      Object timeout = 3000; 
      dlg = Globals.ThisAddIn.Application.Dialogs[ 
       Word.WdWordDialog.wdDialogFileSaveAs]; 
      int result = dlg.Display(ref timeout); 
     } 
     else 
     { 
      Globals.ThisAddIn.Application.ActiveDocument.Save(); 
     } 

परिणाम जाना है, जो बटन दबाने स्टोर करेगा (0- रद्द 1- ठीक है, 2- पास)