Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Automatisierungsfehler Das aufgerufene Objekt wurd

Automatisierungsfehler Das aufgerufene Objekt wurd
Susanne
++++++++++++++++++++++++++++++++++++++++
bitte sämtliche Threads bisher einfach mal vergessen
++++++++++++++++++++++++++++++++++++++++
via "Application.OnTime #4:04:00 AM#, "test" wird folgendes Makro aufgerufen:
Sub test()
Windows("DE.xls").Activate
Sheets("data test").Select
Range("B2400:B2499").Select
Selection.Copy
Range("M2400").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
Sheets("ze1").Activate
Range("A1").Activate
With ActiveSheet
.Range("A7:AZ2500").Sort Key1:=.Range("D7"), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
Sheets("#NVi").Select
End Sub
Dabei erhalte ich, nachdem das Makro bereits fast problemlos durchgelaufen ist, folgenden Laufzeitfehler:
Automatisierungsfehler -2147417848 (80010108)
Das aufgerufene Objekt wurde von den Clients getrennt

Diese beiden Zeilen am Ende des Makro-Codes sind gelb unterlegt:
.Range("A7:AZ2500").Sort Key1:=.Range("D7"), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
was ist daran falsch? Was bedeutet die Fehlermeldung?
Der Fehler tritt nur dann auf, wenn Excel im Hintergrund läuft. Ist das Excel-Fenster im Fokus und Vordergrund, läuft das Makro komplett durch.
Anzeige
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
11.10.2010 07:25:24
Klaus-Dieter
Hallo Susanne,
schmeiß die (ohnehin überflüssigen) Selectanweisungen raus. Die funktionieren nur im aktiven Tabellenblatt.
Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
11.10.2010 08:46:45
Susanne
die Select-Anwesiungen laufen doch prima. Die lösen den Fehler nicht aus.
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
11.10.2010 07:39:52
fcs
Hallo Susanne,
das Problem wird durch Wiederholung der Fragen ja nicht gelöst.
Ich schlage vor, dass du Select und Activate im Code bei der gewünschten Ausführung schlicht und einfach mal aus deinem Wortschatz innerhalb von Prozeduren streichst.
Ich hab deine gewüschten Funktionen jetzt mal in einer Test-Datei getestet unter Windows Vista, Office 2007
Größe der Datei ca. 13 MB, Im Blatt ze1 Bereich A6:AZ2500 gefüllt mit Daten und Formeln.
Im Blatt ze2 im Bereich A6:A2500 die gleichen Werte wie in Blatt ze1. In B6:AZ2500 werden per SVERWEIS die Werte aus Blatt ze1 geholt.
Diese Anordnung ist sehr rechenintensiv und Excel brauch ca. eine halbe Minute, um die Datei neu zu berechnen. CPU-Leistung geht nach 100% und bei meinem Notebook erhöht manchmal der CPU-Lüfter seine Drehzahl. Gleichzeitig hatte ich Word, einen Texteditor und Firefox am Laufen.
Aber auch wenn Excel dabei zum Teil mit dem Status keine Rückmeldung angezeigt wird und das Programmfenster von Excel ein erschreckendes Bild zeigt, so erholte sich das System immer wieder.
Warum dann bei dir das Betriebssystem bzw. Excel dann im Kopierschritt sich scheinbar nicht mehr kennen: ? Zu viele/rechenintensive andere Anwendung gleichzeitig aktiv und damit Resourcen-Probleme?
Nachfolgend der von mir getestete Code.
Gruß
Franz
Sub Timeplus20s()
Dim dtime As Date
'test nach 20 Sekunden starten
dtime = Time + TimeSerial(0, 0, 20)
Application.OnTime Earliesttime:=dtime, Procedure:="Test"
End Sub
Sub test()
Dim StatusCalc As Long
With Application
.ScreenUpdating = False
StatusCalc = .Calculation
If StatusCalc  xlCalculationManual Then .Calculation = xlCalculationManual
.EnableEvents = False
End With
With Workbooks("test.xls")
With .Worksheets("ze1").Range("A7:Z2500")
.Calculate
.Copy
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End With
Application.Calculate
End With
Call Sortieren
With Application
.ScreenUpdating = True
StatusCalc = .Calculation
If StatusCalc  .Calculation Then .Calculation = StatusCalc
.EnableEvents = True
End With
End Sub
Sub Sortieren()
With Workbooks("test.xls").Worksheets("ze2")
.Range("A7:AZ2500").sort Key1:=.Range("F7"), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
End Sub

Anzeige
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
11.10.2010 08:49:34
Susanne
der Kopierschritt läuft doch problemlos, der Sortier-Schritt retourniert den Fehler. Und ja, natürlich ist das Excel extrem rechnerintensiv (wird mit Daten aus der DDE-Schnittstelle gefüttert), aber ich hab auch einen Quad-CPU, Auslastung etwa 50%.
Weist diese Fehlermeldung auf Ressourcen-Probleme hin oder wie? Und wenn ja, wieso läufts dann problemlos wenn das Excel im Vordergrund bleibt?
Anzeige
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
11.10.2010 08:56:59
Klaus-Dieter
Hallo Susanne,
du kannst uns das ruhig glauben: Select funktioniert nur in aktiven Tabellenblättern. Ausserdem ist das auch ein Resourcenfresser.
Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
11.10.2010 08:58:49
Susanne
das glaub ich euch auch, aber es hängt irgendwie nicht mit dem Fehler und auch nicht mit meinen Fragen zusammen
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
11.10.2010 09:27:29
Klaus-Dieter
Hallo Susanne,
wem nicht zu raten ist, dem ist auch nicht zu helfen. Ich bin raus.
Viele Grüße Klaus-Dieter

Online-Excel
Anzeige
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
12.10.2010 02:33:57
fcs
Hallo Susanne,
wenn das Excel-Makro gestartet wird, wenn eine andere Anwendung aktiv ist, dann scheint in Excel noch irgend ein anders Ergeignis ausgelöst zu werden, das den nachfolgenden Aufruf der Sortierfunktion blockiert.
Da ich bei umfangreichen Makros fast immer mit Deaktivierung von Ereignis-Makros und Bildschirmaktualisierung arbeite war mir hier bisher kein Zusammenhang aufgefallen.
In deinem Fall müssen die Ereignismakros vorübergehend deaktiviert werden.
Gruß
Franz
Sub test()
Dim StatusCalc As Long
With Application
.ScreenUpdating = False
'    StatusCalc = .Calculation
'    If StatusCalc  xlCalculationManual Then .Calculation = xlCalculationManual
.EnableEvents = False
End With
Windows("DE.xls").Activate
Sheets("data test").Select
Range("B2400:B2499").Select
Selection.Copy
Range("M2400").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
Sheets("ze1").Activate
Range("A1").Activate
With ActiveSheet
.Range("A7:AZ2500").sort Key1:=.Range("D7"), Order1:=xlDescending, Header:=xlNo,  _
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
Sheets("#NVi").Select
With Application
.ScreenUpdating = True
'    If StatusCalc  .Calculation Then .Calculation = StatusCalc
.EnableEvents = True
End With
End Sub

Anzeige
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
12.10.2010 05:13:07
Susanne
welches andere Ereignis denn? Was soll da noch zusätzlich ausgelöst werden, was dann das Sortieren blockiert?!
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
12.10.2010 07:57:43
fcs
Hallo Susanne,
ich beschreibe nur was ich jetzt beobachtet habe. Wenn ich wüsste was für ein Ereignis, dann hätte ich es geschrieben.
Mit Deaktivierung der Events funktioniert das Makro bei mir auch dann wenn es via OnTime oder anders gestartet wird, wenn gerade eine andere Anwendung aktiv ist. Ohne Deaktivierung wird bei mir auch die von dir beschriebene Fehlermeldung angezeigt und Excel geht in einen Zustand über, der nur durch Schliessen von Excel und Neustart beseitigt werden kann.
Ich hab jetzt nicht probiert, ob man die Deaktivierung und Reaktivierung von EnableEvents auch an anderer Position im Code eingefügt werden kann. Evtl. reicht es unmittelbar vor dem Sortieren EnableEvents auf False zu setzen und unmttelbar danach wieder auf True.
Ab jetzt bin ich per Ferndiagnose mit meinem Latein am Ende.
Mit einem letzten Gruß (auch wenn du inzwischen auf diese Form der Höflichkeit verzichtest)
Franz
Anzeige
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
12.10.2010 08:32:04
Susanne
Hallo fcs,
ach, das is ja mal interessant - bei dir tritt dieser Fehler auch auf? Du kannst aber nicht genau sagen, *was* da blockiert?
lg
wann ist endlich Schluss.....
12.10.2010 08:36:47
zu
AW: wann ist endlich Schluss.....
12.10.2010 08:39:05
Susanne
was soll das? Ich finde es sehr interessant dass fcs den Fehler jetzt auch hat
Anzeige
AW: Automatisierungsfehler Das aufgerufene Objekt wurd
12.10.2010 08:49:14
Susanne
Ohne Deaktivierung wird bei mir auch die von dir beschriebene Fehlermeldung angezeigt und Excel geht in einen Zustand über, der nur durch Schliessen von Excel und Neustart beseitigt werden kann.
und du kannst nicht sagen, *was* da genau blockiert? Das is ja krass wenn du exakt denselben Fehler erhältst...
Ich hab jetzt nicht probiert, ob man die Deaktivierung und Reaktivierung von EnableEvents auch an anderer Position im Code eingefügt werden kann. Evtl. reicht es unmittelbar vor dem Sortieren EnableEvents auf False zu setzen und unmttelbar danach wieder auf True.
yep, klappt!
lg
Anzeige
AW: Dann schliesse ich diesen Thread
12.10.2010 19:52:28
fcs
o.t.
;
Anzeige
Anzeige

Infobox / Tutorial

Automatisierungsfehler in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. Code Überprüfung: Überprüfe deinen VBA-Code auf Select- und Activate-Anweisungen, da diese oft zu Automatisierungsfehlern führen können, insbesondere wenn Excel im Hintergrund läuft.

  2. Ereignisse Deaktivieren: Füge in deinem Makro die Zeile Application.EnableEvents = False hinzu, bevor du kritische Operationen wie Sortieren ausführst. Setze sie danach wieder auf True.

    With Application
       .ScreenUpdating = False
       .EnableEvents = False
    End With
  3. Ressourcen Management: Achte darauf, dass keine anderen rechenintensiven Anwendungen im Hintergrund laufen, während dein Makro ausgeführt wird. Dies kann zu dem Fehler "das aufgerufene Objekt wurde von den Clients getrennt" führen.

  4. Makro Testen: Starte dein Makro, während Excel im Vordergrund ist. Wenn der Fehler nicht auftritt, liegt es wahrscheinlich an den Hintergrundprozessen.


Häufige Fehler und Lösungen

  • Automatisierungsfehler -2147417848: Dieser Fehler tritt häufig auf, wenn Excel im Hintergrund läuft oder wenn Ressourcenknappheit besteht. Stelle sicher, dass dein Makro mit den oben genannten Anpassungen ausgeführt wird.

  • Select-Anweisungen: Vermeide Select und Activate, um die Stabilität deines Codes zu erhöhen. Diese Anweisungen können Fehler verursachen, wenn das Zielblatt nicht aktiv ist.


Alternative Methoden

  • Direkte Zellreferenzierung: Anstelle von Select und Activate, arbeite direkt mit den Zellen, um die Effizienz zu erhöhen. Beispiel:

    Range("B2400:B2499").Copy Destination:=Range("M2400")
  • Verwendung von Arrays: Lese die Daten in ein Array, verarbeite die Daten und schreibe sie dann zurück in das Arbeitsblatt. Dies kann die Leistung deines Makros verbessern.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du ein Makro ohne Select-Anweisungen schreibst:

Sub CleanUpData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("data test")

    ' Kopieren der Werte ohne Select
    ws.Range("B2400:B2499").Copy
    ws.Range("M2400").PasteSpecial Paste:=xlPasteValues

    ' Sortieren der Daten
    ws.Range("A7:AZ2500").Sort Key1:=ws.Range("D7"), Order1:=xlDescending, Header:=xlNo
End Sub

Tipps für Profis

  • Verwende DoEvents, um Excel die Möglichkeit zu geben, auf Benutzerinteraktionen zu reagieren. Dies kann helfen, den Automatisierungsfehler zu vermeiden, wenn dein Makro längere Zeit benötigt.

  • Nutze die On Error Resume Next Anweisung, um den Code robust gegen Laufzeitfehler zu machen, jedoch mit Bedacht, da dies auch andere Fehler verschleiern kann.


FAQ: Häufige Fragen

1. Was bedeutet der Automatisierungsfehler? Der Fehler "das aufgerufene Objekt wurde von den Clients getrennt" deutet darauf hin, dass Excel die Verbindung zu einem Objekt verloren hat, häufig aufgrund von Ressourcenproblemen oder wenn die Anwendung im Hintergrund läuft.

2. Wie kann ich den Automatisierungsfehler in meinem VBA-Code vermeiden? Um diesen Fehler zu vermeiden, solltest du Select- und Activate-Anweisungen vermeiden, Ereignisse deaktivieren und darauf achten, dass dein Computer nicht überlastet ist, während das Makro läuft.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige