web-dev-qa-db-ja.com

Excel VBAオートメーションエラー:呼び出されたオブジェクトはクライアントから切断されました

以前にこの問題への言及を見たことはありますが、いくつかの提案を試みましたが、まだエラーが発生しています。別の本のデータを集めてレポートを生成するワークブックがあります。次に、新しいブックを作成し、レポート情報を新しいブックにコピーし、新しいブックを保存して閉じてから、次のレポートに進みます。これを約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
10
William

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
6
red

今日、この問題に遭遇しました: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」は、シート上の任意のセルに置き換えることができます。

3
eagle

オブジェクトを使用し、それを解放( "切断")して、再度使用する必要があります。オブジェクトを終了するか、Form_Closingを呼び出したときにのみオブジェクトを解放します。

2
tjvg1991

数百行のコードがある大きなExcel 2000スプレッドシートでも同じ問題が発生しました。私の解決策は、クラスの始めにワークシートをアクティブにすることでした。 I.E. ThisWorkbook.Worksheets( "WorkSheetName")。Activateこれは、操作(コード)の開始時に "WorkSheetName"がアクティブだった場合、エラーが発生しなかったことに気づいたときにようやく発見されました。しばらく私を夢中にさせた。

1

次のコード行のエラー(リクエスタウィリアムによると)は、次の理由によるものです。

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

コピー先のコピー先のシートは閉じられています。 (ここではnewbook.Sheets("Sheet1"))。宛先にコピーする直前に以下のステートメントを追加します。

_Application.Workbooks.Open ("YOUR SHEET NAME")
_

これで問題が解決します!!

0
Durga Mahesh

いくつか試してみる...

  1. コードの2番目の「Set NewBook」行をコメント化します...

  2. ブックへのオブジェクト参照が既にあります。

  3. シートをコピーした後にSaveAsを実行します。

0
Jim Cone