2013-06-25 8 views
8

मुझे पता है कि मैंने पहले इस मुद्दे के संदर्भ देखे हैं, लेकिन मैंने कई सुझावों का प्रयास किया है और मुझे अभी भी त्रुटि मिल रही है। मेरे पास एक कार्यपुस्तिका है जो किसी अन्य पुस्तक से डेटा एकत्र करती है और एक रिपोर्ट उत्पन्न करती है। मैं फिर एक नई कार्यपुस्तिका बनाना चाहता हूं, रिपोर्ट की जानकारी को नई किताब में कॉपी करना, नई पुस्तक को सहेजना और इसे बंद करना चाहता हूं, और फिर अगली रिपोर्ट पर जाना चाहता हूं। इसे लगभग 10 बार करना चाहिए। मेरे कोड मैं कहाँ को कॉपी कर रहा हूँ और चादरें चिपकाने के हिस्से में, मैं एक त्रुटिएक्सेल वीबीए ऑटोमेशन त्रुटि: ऑब्जेक्ट का ऑब्जेक्ट अपने ग्राहकों से डिस्कनेक्ट हो गया है

Error -2147417848 Automation error The object invoked has disconnected from its clients

मैं इस त्रुटि के बारे में अन्य पोस्टिंग जाँच कर ली है, और किसी भी परिणाम के बिना सुझाव दिया समाधान की कोशिश की हो रही है। दिलचस्प बात यह है कि कभी-कभी से पहले तोड़ने कोड के 5 चक्र के माध्यम से यह कर देगा, कभी कभी केवल 2. केवल स्थिरता कि यह हमेशा एक ही स्थान पर टूट जाता है

fromBook.Sheets("Report").Copy Before:=newBook.Sheets("Sheet1")

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

मैं वास्तव में मदद का उपयोग कर सकता था!

यहाँ मेरी उप के कोड है:

Sub CreateAndSave(ByRef Reg As Integer, ByVal j As Integer) 

     Dim fromBook As Workbook 
     Dim fromSheet As Worksheet 
     Dim newBook As Workbook 
     Dim fileExists As Boolean 
     Dim i As Integer 
     Dim Holder As Integer 


     Application.ScreenUpdating = False 
     Application.DisplayAlerts = False 

      Set fromBook = Application.Workbooks("Region_Audit_Report") 
      Set newBook = Workbooks.Add 

      With newBook 
      .SaveAs Filename:="G:\DataTeam\ExcelDev\Audit Report\Region Workbooks\Region" & Reg & " " & Month(Date) & "-" & Day(Date) & "-" & Year(Date) & ".xlsx" _ 
      , FileFormat:=xlOpenXMLWorkbook 
      End With 

     Set newBook = Application.Workbooks("Region" & Reg & " " & Month(Date) & "-" & Day(Date) & "-" & Year(Date) & ".xlsx") 

     fromBook.Sheets("Report").Copy Before:=newBook.Sheets("Sheet1") 
     fromBook.Sheets("MonthData").Copy After:=newBook.Sheets("Report") 

     newBook.Sheets("MonthData").Range("A1") = "Month" 
     newBook.Sheets("MonthData").Range("B1") = "Store#" 
     newBook.Sheets("MonthData").Range("C1") = "District" 
     newBook.Sheets("MonthData").Range("D1") = "Region" 
     newBook.Sheets("MonthData").Range("E1") = "Due Date" 
     newBook.Sheets("MonthData").Range("F1") = "Comp Date" 
     newBook.Sheets("MonthData").Range("G1") = "# of Errors" 
     newBook.Sheets("MonthData").Range("H1") = "Late?" 
     newBook.Sheets("MonthData").Range("I1") = "Complete?" 

     newBook.Sheets("MonthData").Range("A1:I1").Interior.ColorIndex = 43 


      newBook.Save 

      newBook.Close 


      Application.DisplayAlerts = True 

    End Sub 
+0

अपने मैक्रो के शीर्ष पर गणना अक्षम करने का प्रयास करें। आवेदन। गणना = xlCalculationManual (फिर इसे अंत में फिर से सक्षम करें) ((मेरे पास एक समान समस्या है और यह इसे ठीक करता है)) – Sam

+0

मैंने कोशिश की। यह अभी भी एक ही स्थान पर तोड़ दिया। – William

उत्तर

6

मुझे एक्सेल 2000 से 2010 में कनवर्ट करने वाली कई परियोजनाओं पर यह समस्या आई है। मुझे लगता है कि जो काम करता है वह मुझे लगता है। मैं दो परिवर्तन, लेकिन बनाया यकीन नहीं है जो सफलता की वजह से:

1) मैं बदल मैं कैसे बंद कर दिया और फाइल सेव (करीब से & बचाने = एक ही फाइल नाम के रूप में बचाने के लिए सही और फ़ाइल को बंद करें:

... 
    Dim oFile   As Object  ' File being processed 
... 
[Where the error happens - where aArray(i) is just the name of an Excel.xlsb file] 
    Set oFile = GetObject(aArray(i)) 
... 
'oFile.Close SaveChanges:=True - OLD CODE WHICH ERROR'D 
'New Code 
oFile.SaveAs Filename:=oFile.Name 
oFile.Close SaveChanges:=False 

2) मैं वापस चला गया और कोड में .range के सभी के लिए देखा और यकीन है कि यह पूरा निर्माण था ..

Application.Workbooks("workbook name").Worksheets("worksheet name").Range("G19").Value 

या (100% यकीन नहीं है कि अगर यह सही सिंटैक्स है, लेकिन यह 'प्रयास' मैंने बनाया है)

ActiveSheet.Range("A1").Select 
+0

SaveAs कमांड मेरे लिए काम करता प्रतीत होता है। धन्यवाद –

+0

आपने इन पंक्तियों को कहां रखा? – H20rider

0

चीजों की कोशिश करने के युगल ... बाहर कोड के दूसरे "NewBook ​​सेट" लाइन

  1. टिप्पणी ...

  2. आपके पास पहले से ही कार्यपुस्तिका का ऑब्जेक्ट संदर्भ है।

  3. चादरों की प्रतिलिपि बनाने के बाद अपने SaveAs करें।

+0

मैंने सुझाए गए परिवर्तनों के साथ प्रयास किया, और कोड के माध्यम से दूसरे दौर में, उसी स्थान पर, उसी त्रुटि में तोड़ दिया। – William

+0

इस बार संभावित समस्या यह है कि ऐसा लगता है कि यह कोड के माध्यम से घूमता हुआ है, ताकि बुक 1 खोला गया और बंद होने से पहले बुक 2 खोला गया था। – William

1

मुझे कोड की सैकड़ों लाइनों के साथ एक बड़ी एक्सेल 2000 स्प्रेडशीट में यही समस्या थी। मेरा समाधान कक्षा की शुरुआत में वर्कशीट सक्रिय करना था। अर्थात। यह वर्कबुक। वर्कशीट्स ("वर्कशीटनाम")। सक्रिय करें यह आखिरकार खोजा गया जब मैंने देखा कि ऑपरेशन (कोड) शुरू करते समय "वर्कशीटनाम" सक्रिय था, तो त्रुटि नहीं हुई थी। मुझे थोड़ी देर के लिए पागल कर दिया।

+0

अजीब, जब मैंने अपने मैक्रो में यह कथन जोड़ा, तो यह काम करता था, लेकिन इसका कुछ दुष्प्रभाव था, इसलिए मैंने इसे फिर से ले लिया और फिर भी यह काम किया। तो टिप के लिए धन्यवाद! –

2

आपने ऑब्जेक्ट का उपयोग किया होगा, इसे जारी किया होगा ("डिस्कनेक्ट"), और इसे फिर से इस्तेमाल किया।रिलीज ऑब्जेक्ट केवल इसके समाप्त होने के बाद, या Form_Closing पर कॉल करते समय।

+0

यह वास्तव में मदद करता है। मेरी समस्या यह है कि मैं PERSONAL.XLSB में उप-कॉल करने का प्रयास कर रहा हूं। लेकिन एक्सेल प्रारंभ होने पर यह कार्यपुस्तिका स्वचालित रूप से खोला जाएगा .. जब मैं दोबारा खोलने की कोशिश करता हूं, तो Excel एक विंडो को यह पूछने के लिए संकेत देगा कि क्या आप "केवल पढ़ने" के द्वारा खोलना चाहते हैं ... इससे डिस्कनेक्ट हो जाता है। –

3

मैंने आज इस समस्या को अभी पूरा किया है: मैंने अपनी एक्सेल प्रोजेक्ट को 2007 से 2010 तक माइग्रेट किया। एक निश्चित बिंदु पर, जब मेरे मैक्रो ने एक नई लाइन डालने की कोशिश की (उदा। Range("5:5").Insert), वही त्रुटि संदेश आया। ऐसा तब होता है जब पहले एक और शीट संपादित की गई थी (मेरा मैक्रो दूसरी शीट पर स्विच करता है)।

Google के लिए धन्यवाद, और आपकी चर्चा, मुझे निम्नलिखित समाधान मिला (उत्तर 30 जुलाई '13 को 0:27 पर "लाल" द्वारा दिए गए उत्तर के आधार पर): शीट पर स्विच करने के बाद एक सेल को संपादित करना होगा एक नई पंक्ति डालने से पहले। मैंने निम्नलिखित कोड जोड़ा है:

'=== Excel bugfix workaround - 2014.08.17 
Range("B1").Activate 
vCellValue = Range("B1").Value 
Range("B1").ClearContents 
Range("B1").Value = vCellValue 

"बी 1" शीट पर किसी भी सेल द्वारा प्रतिस्थापित किया जा सकता है।

+0

मुझे एक ही त्रुटि मिल रही थी, संयोग से, वही काम कर रहा था ("इन्सर्ट" का आह्वान करना) और आपका समाधान स्पॉट पर है! स्पष्ट ब्रेक डाउन के लिए धन्यवाद! हो सकता है कि आप निम्नलिखित में अपनी प्रतिक्रिया में बोल्ड डालना चाहें :) नीचे पंक्ति: "... एक नई पंक्ति डालने से पहले एक सेल को संपादित करना होगा" – elektrykalAJ

0

कोड के नीचे लाइन (के रूप में अनुरोधकर्ता-विलियम ने उल्लेख किया) में त्रुटि निम्न कारण से है:

fromBook.Sheets("Report").Copy Before:=newBook.Sheets("Sheet1") 

गंतव्य चादर आप को कॉपी करने के लिए कोशिश कर रहे हैं बंद कर दिया है। (यहां newbook.Sheets("Sheet1"))। गंतव्य पर प्रतिलिपि करने से पहले नीचे दिए गए कथन को जोड़ें।

Application.Workbooks.Open ("YOUR SHEET NAME") 

इससे समस्या हल हो जाएगी !!

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