web-dev-qa-db-fra.com

Erreur d’automatisation VBA Excel: l’objet appelé s’est déconnecté de ses clients

Je sais que j'ai déjà vu des références à cette question, mais j'ai essayé plusieurs des suggestions et je reçois toujours l'erreur. J'ai un classeur qui assemble des données d'un autre livre et génère un rapport. Je souhaite ensuite créer un nouveau classeur, copier les informations du rapport dans le nouveau, sauvegarder le nouveau et le fermer, puis passer au rapport suivant. Cela devrait être fait environ 10 fois. Dans la partie de mon code où je copie et colle les feuilles, j'obtiens une erreur 

Erreur -2147417848 Erreur d'automatisation L'objet appelé a déconnecté de ses clients

J'ai vérifié d'autres messages à propos de cette erreur et essayé les solutions suggérées sans aucun résultat. Ce qui est intéressant, c’est que parfois, il faut 5 cycles de code avant de décomposer, parfois seulement 2. La seule consistance est qu’il se rompt toujours au même endroit 

fromBook.Sheets ("Report"). Copier avant: = newBook.Sheets ("Sheet1")

J'ai l'option Explicit en haut du module, et j'ai vérifié pour m'assurer qu'il n'y avait pas de globals à l'intérieur du sous-marin dans lequel il s'introduit. Cela dit, c'est tout à fait possible que j'ai oublié quelque chose. J'ai aussi mis un "minuteur" à un moment donné pour m'assurer que les feuilles Excel ne se chevauchaient pas.

Je pourrais vraiment utiliser l'aide!

Voici le code de mon sous-marin:

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
8
William

J'ai eu ce problème sur plusieurs projets convertissant Excel 2000 à 2010. Voici ce que j'ai trouvé qui semble fonctionner. J'ai fait deux changements, mais je ne sais pas ce qui a causé le succès:

1) J'ai changé la façon dont j'ai fermé et enregistré le fichier (depuis close & save = true pour enregistrer sous le même nom de fichier et fermer le fichier:

...
    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) Je suis retourné et ai cherché toute la gamme dans le code et je me suis assuré que c'était la construction complète.

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

ou (pas 100% sûr si c'est la syntaxe correcte, mais c'est l'effort que j'ai fait)

ActiveSheet.Range("A1").Select
6
red

Je viens de rencontrer ce problème aujourd'hui: j'ai migré mon projet Excel d'Office 2007 vers 2010. À un moment donné, lorsque ma macro a essayé d'insérer une nouvelle ligne (par exemple, Range("5:5").Insert), le même message d'erreur est apparu. Cela se produit uniquement lorsqu'une autre feuille a déjà été modifiée (ma macro bascule sur une autre feuille). 

Grâce à Google et à votre discussion, j'ai trouvé la solution suivante (basée sur la réponse donnée par "rouge" à la réponse du 30 juil. 13 à 0:27): après le passage à la feuille, une cellule doit être modifiée avant l'insertion rangée. J'ai ajouté le code suivant:

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

"B1" peut être remplacé par n'importe quelle cellule de la feuille.

3
eagle

Vous devez avoir utilisé l'objet, l'avoir relâché ("déconnecter") et l'avoir réutilisé. Ne relâchez l'objet que lorsque vous avez terminé ou lorsque vous appelez Form_Closing.

2
tjvg1991

J'ai eu ce même problème dans une grande feuille de calcul Excel 2000 avec des centaines de lignes de code. Ma solution consistait à rendre la feuille de calcul active au début du cours. C'EST À DIRE. ThisWorkbook.Worksheets ("WorkSheetName"). Activez Ceci a finalement été découvert lorsque j'ai remarqué que si "WorkSheetName" était actif lors du démarrage de l'opération (le code), l'erreur ne s'était pas produite. M'a rendu fou pendant un bon bout de temps.

1
StymiedforAwhile

L'erreur dans la ligne de code ci-dessous (telle que mentionnée par le demandeur-William) est due à la raison suivante:

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

La feuille de destination vers laquelle vous essayez de copier est fermée. (Ici newbook.Sheets("Sheet1")) . Ajoutez l'instruction ci-dessous juste avant la copie vers la destination.

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

Cela résoudra le problème !!

0
Durga Mahesh

Quelques choses à essayer ...

  1. Commentez la deuxième ligne de code "Set NewBook" ...

  2. Vous avez déjà une référence d'objet au classeur.

  3. Faites votre SaveAs après avoir copié les feuilles.

0
Jim Cone