1. ホーム
  2. excel

[解決済み] Excel VBA オートメーション エラー。呼び出されたオブジェクトは、そのクライアントから切断されました。

2022-02-11 03:49:48

質問

以前にもこの問題についての言及を見たことがありますが、いくつかの提案を試しましたが、まだエラーが出ます。 私は、他のブックからデータを組み立て、レポートを作成するワークブックを持っています。 その後、新しいワークブックを作成し、レポート情報を新しいブックにコピーし、新しいブックを保存して閉じ、次のレポートに移りたいと思います。 これを10回程度行う必要があります。 シートのコピー&ペーストをしている部分で、次のようなエラーが発生します。

エラー -2147417848 オートメーションエラー 呼び出されたオブジェクトは、次のようになりました。 クライアントとの接続を切断

このエラーについて他の投稿をチェックし、提案された解決策を試しましたが、結果は得られませんでした。興味深いのは、壊れる前にコードの5サイクルをやり遂げることもあれば、2サイクルしかできないこともあるということです。 唯一の一貫性は、常に同じ場所で壊れるということです。

<ブロッククオート

fromBook.Sheets("Report").Copy Before:=newBook.Sheets("Sheet1")をコピーします。

モジュールの先頭にExplicitというオプションがあり、それがブレークしているサブの中にグローバルがないことを確認しています。 とはいえ、私が何かを見落としている可能性は十分にあります。 また、Excelシートが互いに歩き回っていないことを確認するために、ある時点で"timer"を入れました。

本当に助かりました

以下は私のサブのコードです。

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

解決方法は?

Excel2000を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