2013-06-25 336 views
8

我知道我以前曾見過有關此問題的參考,但我嘗試了幾個建議,但仍然收到錯誤消息。我有一本工作手冊,用於組合另一本書中的數據並生成報告。然後,我想製作一本新的工作簿,將報告信息複製到新書中,保存新書並關閉它,然後轉到下一個報告。它應該做10次左右。在我的代碼我在哪裏複製和粘貼紙上的一部分,我得到一個錯誤Excel VBA自動化錯誤:調用的對象已與客戶端斷開連接

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

我也檢查過其他帖子這個錯誤,並試圖建議的解決方案沒有任何結果。有趣的是,有時這將使它通過代碼5次破之前,有時只有2唯一的一致性,它總是打破在同一個地方

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

我有選擇的的頂部明確模塊,並且我已經檢查過以確保子進程中沒有任何全局變量。這就是說,完全有可能我忽略了某些事情。我也在一個點上放了一個「計時器」,以確保Excel表格不會彼此走動。

我真的可以使用幫助!

這裏是我的子代碼:

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

嘗試在宏的頂部禁用計算。 Application.Calculation = xlCalculationManual(然後在最後再次啓用它)((我有一個類似的問題,並修復了它)) – Sam

+0

我試過了。它仍然在同一個地方爆發。 – William

回答

6

我在將Excel 2000轉換爲2010的多個項目中遇到過這個問題。下面是我發現的似乎正在工作的東西。我做了兩個改變,但不知道這引起了成功:

1)我改變了我關閉並保存文件(從接近&保存= true來保存爲相同的文件名,並關閉文件:

... 
    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

另存爲命令似乎爲我工作。謝謝 –

+0

你把這些線放在哪裏? – H20rider

0

幾件事情嘗試...

  1. 註釋掉的代碼的第二個 「設置NewBook」 行......

  2. 您已經擁有對工作簿的對象引用。

  3. 複製工作表後執行SaveAs。

+0

我對建議的更改進行了嘗試,並在代碼的第二輪中發現了相同的位置,相同的錯誤。 – William

+0

這次的潛在問題是,它看起來像循環遍歷代碼,因此Book1在Book1被保存並關閉之前打開。 – William

1

我在具有數百行代碼的大型Excel 2000電子表格中遇到了同樣的問題。我的解決方案是使該工作表在該類的開始處處於活動狀態。 I.E. ThisWorkbook.Worksheets(「WorkSheetName」)。激活 當我注意到,如果「WorkSheetName」在啓動操作(代碼)時處於活動狀態,則最終發現此錯誤未發生。把我瘋狂了很久。

+0

奇怪的是,當我把這個聲明加到我的宏中時,它有效,但是它有一些副作用,所以我再次拿走它,然後它仍然工作。所以謝謝你的提示! –

2

您必須使用該對象,釋放它(「斷開連接」),然後再次使用它。只有在完成後才能發佈對象,或者致電Form_Closing

+0

這實際上有幫助。我的問題是,我試圖在PERSONAL.XLSB中調用一個Sub。但是當Excel開始時,此工作簿將自動打開。當我嘗試再次打開時,Excel會提示一個窗口詢問您是否想通過「只讀」打開...這會導致斷開連接。 –

3

我今天剛剛遇到此問題:我將Excel項目從Office 2007遷移到2010年。在某個時候,當我的宏嘗試插入新行(例如Range("5:5").Insert)時,出現相同的錯誤消息。只有當先前另一張紙張已被編輯(我的宏切換到另一張紙張)時纔會發生。

感謝Google和您的討論,我找到了以下解決方案(根據回答於2013年7月30日0:27回答「red」的答案):在切換到工作表之後,Cell必須被編輯在插入新行之前。我已添加以下代碼:

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

「B1」可以被表單上的任何單元替換。

+0

我碰到同樣的錯誤,而巧合的是,做同樣的事情(調用「.Insert」),你的解決方案是現貨!感謝您的明確分解!您可能需要在響應中加上以下粗體字:) 底線:「...在插入新行之前必須編輯單元格」 – elektrykalAJ

0

在下面的代碼行(如由請求者 - 威廉提到的)的錯誤是由於以下原因:

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

您要複製到目標片閉合。 (這裏newbook.Sheets("Sheet1"))。 在複製到目的地之前添加以下語句。

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

這將解決這個問題!

相關問題