2014-09-05 7 views
5

को पूरा करने के लिए किसी अन्य एप्लिकेशन की प्रतीक्षा कर रहा है इससे पहले कि आप स्पष्ट हो जाएं: Application.DisplayAlerts = False ने मेरी समस्या का समाधान नहीं किया है।एक्सेल एक ओएलई एक्शन

मैंने एक वीबीए प्रक्रिया (एक्सेल 2010 में शुरू की) लिखा है जो विभिन्न एक्सेल फ़ाइलों वाली एक सरणी के चारों ओर लूप करता है। लूप फ़ाइल खोलता है, डेटा को रीफ्रेश करता है, सरणी में प्रत्येक आइटम के लिए फ़ाइल को सहेजता है और बंद करता है। मैंने एक त्रुटि कैच सब रूटीन लिखा है, इसलिए मैं लॉग करता हूं कि कौन सी एक्सेल फाइलें खोलने/रीफ्रेश/सहेजने में विफल रही हैं ताकि उपयोगकर्ता मैन्युअल रूप से उन्हें देख सकें।

कुछ फाइलें काफी बड़ी हैं और नेटवर्क में बड़ी मात्रा में डेटा चलती है; कभी-कभी मुझे एक संवाद बॉक्स मिलता है: एक्सेल एक ओएलई एक्शन को पूरा करने के लिए किसी अन्य एप्लिकेशन की प्रतीक्षा कर रहा है।

मैं संदेश को अक्षम करने के लिए Application.DisplayAlerts = False का उपयोग कर सकता हूं लेकिन यह संभवतः सभी अलर्ट अक्षम कर देगा ताकि मैं त्रुटियों को न पकड़ सकूं?

आगे मैंने लाइन का उपयोग करके परीक्षण किया है और यह संवाद बॉक्स पॉप-अप को रोकता नहीं है। अगर मैं एंटर दबाता हूं तो यह कुछ मिनट बाद फिर से पॉप-अप होगा।

क्या स्टॉप रोकने का कोई तरीका है विशेष रूप से अन्य अलर्ट रोकने के बिना संदेश है?

एनबी। मेरी प्रक्रिया में एक्सेल का नियंत्रण उदाहरण है जो वीबीए चलाता है और कार्यपुस्तिका को एक अलग उदाहरण में रीफ्रेश करने के लिए खोलता है।

आपकी मदद

मेरे कोड का एक उद्धरण के लिए धन्यवाद, जो नीचे ताज़ा तत्वों

Sub Refresh_BoardPivots_Standard() 
' On Error GoTo Errorhandler 

Dim i 
Dim errorText As String 
Dim x 
Dim objXL As Excel.Application 
Set objXL = CreateObject("Excel.Application") 

GetPivotsToRefresh ' populate array from SQL 
For Each i In StandardBoardPiv 
DoEvents 
'If File_Exists(i) Then 
    If isFileOpen(i) = True Then 
    errorText = i 
    Failed(failedIndex) = errorText 
    failedIndex = failedIndex + 1 
    Else 
    objXL.Visible = True 'False 
    objXL.Workbooks.Open FileName:=i 
     If objXL.ActiveWorkbook.ReadOnly = False Then 
     BackgroundQuery = False 
     Application.DisplayAlerts = False 
     objXL.ActiveWorkbook.RefreshAll 
     objXL.Application.CalculateFull 
     objXL.Application.DisplayAlerts = False 
     objXL.ActiveWorkbook.Save 
     objXL.Application.DisplayAlerts = True 
     objXL.Quit 
     Else 
     errorText = i 
     Failed(failedIndex) = errorText 
     failedIndex = failedIndex + 1 
     objXL.Application.DisplayAlerts = False 
     objXL.Quit 
     Application.DisplayAlerts = True 
     End If 
    End If 
'  Else 
'  errorText = i 
'  Failed(failedIndex) = errorText 
'  failedIndex = failedIndex + 1 
' End If 
DoEvents 
If Ref = False Then 
Exit For 
End If 

Next i 

Exit Sub 

'Errorhandler: 
' 
'errorText = i 
'Failed(failedIndex) = errorText 
'failedIndex = failedIndex + 1 

'Resume Next 
End Sub 
+0

क्यों downvote, क्या गलत है? यदि कोई समस्या है तो मैं इसे – SliderSteve

+0

ठीक कर सकता हूं मैंने आपको +1 दिया क्योंकि मुझे आपके प्रश्न में कुछ भी गलत नहीं दिख रहा है। : पी आपके लिए प्रश्न: आप एक और एक्सेल उदाहरण क्यों बना रहे हैं? क्या यह एक अनावश्यक जटिलता नहीं है? –

+0

धन्यवाद एन 8। हाँ मुझे अपने ब्रेक सब-रूटीन के साथ समस्या हल करने के लिए दूसरा उदाहरण जोड़ना पड़ा। उपयोगकर्ता को एक बटन पर क्लिक करने की आवश्यकता होती है अगर उन्हें प्रक्रिया को सुरक्षित रूप से रोकने की आवश्यकता होती है लेकिन फोकस करने वाली कार्यपुस्तिका के साथ ध्यान केंद्रित किया जाता था, इसलिए बटन को एक्सेस नहीं किया जा सका, इसलिए अलग उदाहरण। – SliderSteve

उत्तर

1

"एक OLE क्रिया को पूरा करने के लिए एक आवेदन के लिए प्रतीक्षा कर रहा है" शामिल है एक चेतावनी संदेश आप कर सकते हैं नहीं है बस बंद करें और भूल जाएं, कभी-कभी मैक्रो बाद में जारी रखने में सक्षम होगा, लेकिन मेरे अनुभव में यदि आप उस त्रुटि को प्राप्त कर रहे हैं तो यह केवल समय की बात है जब तक कि समस्या आपके पूरे मैक्रो को क्रैश/फ्रीज न करे, इसलिए इसे निश्चित रूप से समस्या निवारण और सही किया जाना चाहिए ।

मैं केवल उस त्रुटि जब मैं वस्तुओं के रूप में अतिरिक्त माइक्रोसॉफ्ट ऑफिस अनुप्रयोगों (कोड चलाने वाले एक्सेल के अलावा अन्य) और उनमें से एक का उपयोग कर रहा एक त्रुटि- एक्सेल कोड चल रहा है कि पता नहीं है है मिल एक त्रुटि अन्य अनुप्रयोगों में से एक में हुआ, इसलिए यह इंतजार कर रहा है और इंतजार कर रहा है और अंततः आपको "ओएलई एक्शन पूरा करने के लिए किसी अन्य एप्लिकेशन की प्रतीक्षा कर रहा है" संदेश ...

तो इस तरह की समस्या का निवारण करने के लिए आपको जिन स्थानों पर आप अन्य एमएसओ ऐप्स का उपयोग करते हैं ... आपके उदाहरण में, आपके पास एक्सेल का एक अतिरिक्त उदाहरण है और आप एक्सेस से डेटा खींच रहे हैं, इसलिए उन दोनों में से एक संभावित समस्याएं पैदा कर रहा है ...

नीचे यह है कि मैं इस कोड को दोबारा लिखूंगा, जहां कोड अन्य एमएसओ ऐप्स के साथ इंटरैक्ट करता है, स्पष्ट रूप से नियंत्रित करता है कि उनमें क्या हो रहा है .. एकमात्र टुकड़ा मैं वास्तव में बहुत कुछ नहीं कर सकता GetPivotsToRefresh क्योंकि मैं नहीं कर सकता देखें कि आप वास्तव में क्या कर रहे हैं, लेकिन मेरे कोड में मैंने अभी माना है कि यह एक्सेल फ़ाइलों की एक सूची के साथ एक सरणी लौटा है जिसे आप अपडेट करना चाहते हैं। नीचे दिए गए कोड देखें:

Sub Refresh_BoardPivots_Standard() 
Dim pivotWB As Workbook 
Dim fileList() As Variant 
Dim fileCounter As Long 

Application.DisplayAlerts = False 
fileList = GetPivotsToRefresh 'populate array from SQL 
For fileCounter = 1 To UBound(fileList, 1) 
    Set pivotWB = Workbooks.Open(fileList(fileCounter, 1), False, False) 
    If pivotWB.ReadOnly = False Then 
     Call refreshPivotTables(pivotWB) 
     pivotWB.Close (True) 
    Else 
    '... Error handler ... 
     pivotWB.Close (False) 
    End If 
Next 
End Sub 
Public Sub refreshPivotTables(targetWB As Workbook) 
Dim wsCounter As Long 
Dim ptCounter As Long 
For wsCounter = 1 To targetWB.Sheets.Count 
    With targetWB.Sheets(wsCounter) 
     If .PivotTables.Count > 0 Then 
      For ptCounter = 1 To .PivotTables.Count 
       .PivotTables(ptCounter).RefreshDataSourceValues 
      Next 
      .Calculate 
     End If 
    End With 
Next 
End Sub 

तो मैं अपने खुद के 'refreshPivotTables' बनाया है, लेकिन आप एम्बेडेड किया जा सकता था कि मास्टर उप में, मैं सिर्फ सोचा छोरों और पाश काउंटर उस बिंदु पर थोड़ा जटिल हो सकती है ...

आशा इस मदद करता है, TheSilkCode

+0

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

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