2015-12-14 8 views
5

मेरे पास एक कार्यपुस्तिका है जो एक एपीआई टाइमर द्वारा बंद ट्रिगर होने पर एक्सेल को क्रैश करता है।एपीआई टाइमर पर एक्सेल 2016 दुर्घटना वर्कबुक.क्लोस

संपादित करें: नीचे दिए गए लिंक में कार्यपुस्तिका में टाइमर और निकास मॉड्यूल के अलावा कुछ भी नहीं है और यह वही व्यवहार है, इसलिए यह सामग्री के साथ कोई समस्या नहीं है।

https://www.dropbox.com/s/x0xdwgj5h34ctdk/Book1.xlsm?dl=0

कार्यपुस्तिका के बाद एक्सेल दुर्घटनाओं बंद कर देता है कुछ सेकंड। मैंने टाइमर बंद करने की कोशिश की है, सभी शीट्स को अनदेखा कर रहा है, फॉर्म उतार रहा है ... सभी ऑब्जेक्ट Nothing पर सेट हैं।

मैं जो कर रहा हूं वह Workbooks(ThisWorkbook.Name).Close SaveChanges:=True है ?? !!

एक ही सब को उपयोगकर्ताफॉर्म से कोई समस्या नहीं है। एक्सेल क्रैश होने के बिना कार्यपुस्तिका बंद हो जाती है।

इसे कैसे ठीक करें?

Sub ApplicationExit() 
' Call UnloadAllForms 
' DoEvents 
' Sleep 1000 
' Call StopCloseTimer 
'DoEvents 
'If Application.Workbooks.Count = 1 Then 
' Workbooks(ThisWorkbook.Name).Save 
' Application.Quit 
'Else 
    DoEvents 
    Workbooks(ThisWorkbook.Name).Close SaveChanges:=True 
'End If 
End Sub 

टाइमर द्वारा ट्रिगर किया गया कोड है;

Sub TimerCalled() 

If CloseTimerValue = "" Then Call Reset_CloseTimerValue 
DoEvents 
If basTimers.CloseTimerValue <= Now() And Not Unlocked Then Call ApplicationExit 

On Error Resume Next 'In case sheet is protected 
ThisWorkbook.Sheets("JobIndex").Range("CloseCount").Value = Format(Now() - CloseTimerValue, "hh:m:s") 


End Sub 

उपयोगकर्ता का कहना है; एक्सेल VBA में

CloseUp: 
i = MsgBox("Close Project Register?", vbYesNo, MsgBoxTitle) 
Select Case i 
    Case vbYes 
     Call ApplicationExit 
    Case vbNo 
     Workbooks(ThisWorkbook.Name).Save 
End Select 

उत्तर

0

टाइमर, Application.OnTime आदेश या खिड़कियों टाइमर का उपयोग करके किया जाता है के रूप में प्रयोग कर रहे हैं।

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

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

दोनों मामलों में, ऐसा लगता है कि आपकी निर्धारित प्रक्रिया अभी भी चल रही है।

मेरा सुझाव है कि आप उसमें देखें और application.ontime का उपयोग करने पर विचार करें।

+0

application.ontime से एक्सेल इंस्टेंस को बंद करना और भी खराब है। एक्सेल को क्रैश करने के बजाय कई बार/बंद कर दिया जाएगा और इसे रोकने के लिए टास्क मैनेजर के माध्यम से मारने की आवश्यकता हो सकती है। –

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