以前にこの問題への言及を見たことはありますが、いくつかの提案を試みましたが、まだエラーが発生しています。別の本のデータを集めてレポートを生成するワークブックがあります。次に、新しいブックを作成し、レポート情報を新しいブックにコピーし、新しいブックを保存して閉じてから、次のレポートに進みます。これを約10回行う必要があります。シートをコピーして貼り付けるコードの一部で、エラーが発生します
エラー-2147417848オートメーションエラー呼び出されたオブジェクトはクライアントから切断されました
このエラーに関する他の投稿を確認し、提案された解決策を結果なしで試しました。おもしろいのは、壊れる前に5サイクルのコードをたどることがあることです。たったの2つです。唯一の一貫性は、常に同じ場所で壊れることです。
fromBook.Sheets( "Report")。Copy Before:= newBook.Sheets( "Sheet1")
モジュールの上部にオプションExplicitがあり、サブクラス内に侵入しているグローバルが存在しないことを確認するためにチェックしました。また、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
Excel 2000を2010に変換する複数のプロジェクトでこの問題が発生しました。ここに、動作していると思われるものを示します。 2つの変更を行いましたが、どちらが成功したのかはわかりません。
1)ファイルを閉じて保存する方法を変更しました(close&save = 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
今日、この問題に遭遇しました:ExcelプロジェクトをOffice 2007から2010に移行しました。特定の時点で、マクロが新しい行を挿入しようとしたときに(たとえば、Range("5:5").Insert
)、同じエラーメッセージが表示されました。以前に別のシートが編集された場合にのみ発生します(マクロが別のシートに切り替わります)。
Googleとあなたの議論のおかげで、私は次の解決策を見つけました(13年7月30日午前0時27分に「赤」で与えられた答えに基づいて):シートに切り替えた後、新しいセルを挿入する前にセルを編集する必要があります行。次のコードを追加しました:
'=== Excel bugfix workaround - 2014.08.17
Range("B1").Activate
vCellValue = Range("B1").Value
Range("B1").ClearContents
Range("B1").Value = vCellValue
「B1」は、シート上の任意のセルに置き換えることができます。
オブジェクトを使用し、それを解放( "切断")して、再度使用する必要があります。オブジェクトを終了するか、Form_Closing
を呼び出したときにのみオブジェクトを解放します。
数百行のコードがある大きなExcel 2000スプレッドシートでも同じ問題が発生しました。私の解決策は、クラスの始めにワークシートをアクティブにすることでした。 I.E. ThisWorkbook.Worksheets( "WorkSheetName")。Activateこれは、操作(コード)の開始時に "WorkSheetName"がアクティブだった場合、エラーが発生しなかったことに気づいたときにようやく発見されました。しばらく私を夢中にさせた。
次のコード行のエラー(リクエスタウィリアムによると)は、次の理由によるものです。
_fromBook.Sheets("Report").Copy Before:=newBook.Sheets("Sheet1")
_
コピー先のコピー先のシートは閉じられています。 (ここではnewbook.Sheets("Sheet1")
)。宛先にコピーする直前に以下のステートメントを追加します。
_Application.Workbooks.Open ("YOUR SHEET NAME")
_
これで問題が解決します!!
いくつか試してみる...
コードの2番目の「Set NewBook」行をコメント化します...
ブックへのオブジェクト参照が既にあります。
シートをコピーした後にSaveAsを実行します。