Live-Forum - Die aktuellen Beiträge
Datum
Titel
01.11.2025 21:11:38
01.11.2025 14:22:20
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Objekt von den Clients getrennt

Objekt von den Clients getrennt
18.03.2021 15:13:24
den
hallo!
ich habe eine ganz komische situation bei der ich rat bräuchte:
mein makro (initialisierung einer userform) läuft grundsätzlich fehlerfrei.
wenn ich allerdings die datei frisch öffne und die besagte userform initialisiere, bekomme ich den laufzeitfehler 2147417848 Automatisierungsfehler. Das aufgerufene Objekt wurde von den Clients getrennt.
debuggen ist auch nicht so einfach möglich, da sich excel danach sofort schließt!
durch das setzen von msgbox'es nach jeder zeile konnte ich den fehler aber eingrenzen:
er tritt dabei auf, wenn ein label.caption beschriftet wird (mit dem inhalt einer benamsten zelle)
wenn ich ein anderes makro vorher laufen lasse und erst anschließend die oben beschiebene userform initialisiere, läuft alles rund.
weiß jemand wie ich "das objekt wieder mit den clients verbinden kann"?
(was auch immer das bedeutet...)
bzw was hier das problem ist?
vielen dank!

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objekt von den Clients getrennt
18.03.2021 21:58:18
den
Hallo Max,
ich habe mich kurz durchgelesen (die meisten Google-Treffer landen im Herber-Forum). Es scheint ein Ereignis in die Quere zu kommen.
Lösung scheint:
entweder ein Application.EnableEvents = False am Anfang und True am Ende der besagte Procedure,
oder es gibt in dem Sub ein grössere Datenhandlung, bei dem mit einem DoEvents dazwischen da System wieder mehr Bewegungsfreiheit gibt.
Würde mich interessieren, ob es bei dir klappt.
Übrigens gut, dass Du die gesamte Fehlermeldung eingefügt hast. Manche geben sich nicht die Mühe und warten lieber.
VG
Yal

Anzeige
AW: Objekt von den Clients getrennt
19.03.2021 08:27:51
den
hallo yal!
zunächst mal vielen dank dass du wegen meines problems recherchiert hast!
auf Application.EnableEvents = False bin ich auch gestoßen, das bringt aber leider keine besserung.
doevents ist mir ehrlich gesagt neu, aber auch hiermit konnte ich das problem leider nicht lösen.
als hintergrund info: ich habe zunächst eine userform die eine combobox und eine eingabebox hat, damit sich der user selbst auswählen kann und sich mittels passwort identifiziert.
sind die eingaben korrekt, wird die problematische userform geladen.
in dieser stehen einige informationen (in form von labels), die in einer verborgenen tabelle gespeichert sind (in zellen denen namen zugewiesen sind).
ich habe doevent sowohl in der "passwort-userform" (am schluß), als auch im initialisierungsprozess der "informations-userform" eingegeben (direkt vor der zeile die den absturz verursacht, auch in kombination mit EnableEvents = False vorher und nachher).
ändert leider nichts! :-(
hast du (oder ein anderer experte) noch einen rat?
bin ein bisschen am verzweifeln...
vielen dank!!!
max

Anzeige
AW: Objekt von den Clients getrennt
19.03.2021 08:48:39
den
Hallo Max,
ich glaube leider, dass nicht das Coding den Fehler verursacht, sondern, dass ein Fehler passiert, der durch das Unterbrechen des Codings manifestiert. Dass es dabei sich an stet dieselbe Stelle im Coding sichtbar wird, hat sicher mit Interna des komplilierten Codes zu tun.
Irgendwie müsste man es hinbekommen, Excel so viel Zeit zuerst zu lassen, bis es soweit ist, und dann der modale Zustand für das Makro zu nehmen. So in der Art von:
#If VBA7 Then
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit  _
Systems
#Else
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds as Long) 'For 32 Bit Systems
#End If
Sub Sleep()
Dim i
For i = 1 to 10
Sleep 100 'delay in milliseconds
DoEvents
Next
End Sub


Anzeige
AW: Objekt von den Clients getrennt
19.03.2021 10:28:13
den
irgendwie bekomm ich das nicht hin...
ich hab die "Sub_Sleep" in ein eigenes modul gepackt und die #if anweisung vor der problematischen zeile platziert.
bekomme aber die meldung Fehler beim Kompilieren: Nach End Sub, End Function oder End Property können nur Kommentare stehen.
was mache ich da bitte falsch?

Anzeige
AW: Objekt von den Clients getrennt
19.03.2021 14:54:23
den
Hallo Max,
die #If-#Else-#End If sind Kompilierungsanweisung. Sie sagen Excel, dass je nach Windows Version 32 oder 64 bit welchen Deklaration von Sleep zu verwenden ist.
Diese gehören in dem Modul, wo Sleep eingesetzt wird, und zwar ganz oben direkt unter Option Explicit.
VG
Yal

Anzeige
AW: Objekt von den Clients getrennt
22.03.2021 08:31:49
den
danke für die erklärung.
das hab ich jetzt angepasst und Option Explicit eingefügt.
ich hab es sowohl in der userform, als auch in einem eigenen modul probiert.
vor der "problemzeile" schreibe ich "call sleep". hast du das eh so gemeint?
ich bekomme aber einen Compilierungsfehler. :-(
ich umgehe jetzt das problem so, dass ich beim öffnen der datei automatisch die userform lade (show), nach der die problematische userform "funktioniert".
nicht ideal, aber zumindest fehlerfrei... :-/
vielen dank nochmals!

Anzeige
AW: Objekt von den Clients getrennt
19.03.2021 15:42:55
den
Hi
EnableEvents schaltet nur die Workbook-/Worksheets-Events aus, nicht aber z.B. ein ComboBox_Change Ereignis. Das Laden der ComboBox könnte das Change Ereignis auslösen, so dass du irgendwie in einer Endlos-Schleife landest.
Wenn gar nichts mehr hilft, dann müsste man die Datei mal kopieren und schrittweise abspecken. Mal Tabelleninhalte löschen, testen. Mal direkt Userform2 starten bzw. Userform1 löschen, testen. Mal die Labels entfernen, testen. So lange bis nur noch der Fehler übrig bleibt.
cu
Chris

Anzeige
AW: Objekt von den Clients getrennt
22.03.2021 08:34:51
den
danke chris!
das ist ein guter hinweis, dass sich EnableEvents nur auf die Workbook-/Worksheets-Events bezieht.
die vorgehensweise mit "die datei bis zum fehler abspecken" merk ich mir!

AW: Objekt von den Clients getrennt
22.03.2021 09:19:52
den
danke chris!
das ist ein guter hinweis, dass sich EnableEvents nur auf die Workbook-/Worksheets-Events bezieht.
die vorgehensweise mit "die datei bis zum fehler abspecken" merk ich mir!
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Objekt von den Clients getrennt in Excel VBA beheben


Schritt-für-Schritt-Anleitung

  1. Fehler identifizieren: Beginne damit, den Fehler "Laufzeitfehler 2147417848 Automatisierungsfehler. Das aufgerufene Objekt wurde von den Clients getrennt." zu reproduzieren. Öffne die Excel-Datei und initialisiere die Userform.

  2. Debugging-Maßnahmen: Füge MsgBox-Befehle nach jeder Zeile in Deinem Makro ein, um herauszufinden, wo genau der Fehler auftritt. Dies ist besonders hilfreich, wenn Excel nach dem Fehler sofort schließt.

  3. Ereignisse deaktivieren: Setze Application.EnableEvents = False am Anfang Deiner Prozedur und Application.EnableEvents = True am Ende. Dies kann verhindern, dass unerwünschte Ereignisse während der Ausführung Deines Codes ausgelöst werden.

  4. DoEvents verwenden: Integriere DoEvents in Dein Makro, um Excel mehr Zeit zu geben, bevor der kritische Code ausgeführt wird. Dies kann helfen, den Fehler zu vermeiden.

  5. VBA Sleep verwenden: Wenn das Problem weiterhin besteht, nutze die Sleep-Funktion, um Verzögerungen einzubauen. Füge die folgende Deklaration am Anfang Deines Moduls ein:

    #If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64 Bit Systems
    #Else
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'For 32 Bit Systems
    #End If

    Rufe dann die Sleep-Funktion vor der problematischen Zeile auf, um eine Verzögerung einzubauen.


Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: Wenn Du die Fehlermeldung "Nach End Sub, End Function oder End Property können nur Kommentare stehen" erhältst, überprüfe, ob die #If VBA7-Anweisung korrekt platziert ist, direkt nach Option Explicit.

  • EnableEvents nicht wirksam: Beachte, dass EnableEvents nur für Workbook- und Worksheet-Events gilt. Wenn ein ComboBox_Change-Ereignis während der Initialisierung der Userform ausgelöst wird, kann dies zu einer Endlosschleife führen.


Alternative Methoden

  1. Userform automatisch laden: Eine einfache Möglichkeit, den Fehler zu umgehen, besteht darin, die problematische Userform beim Öffnen der Datei automatisch zu laden. Dies kann oft verhindern, dass der Fehler auftritt.

  2. Datei abspecken: Wenn alles andere fehlschlägt, versuche, die Datei schrittweise zu reduzieren, indem Du Tabelleninhalte oder Controls in der Userform entfernst, bis der Fehler nicht mehr auftritt. Dies kann helfen, die Ursache des Problems zu identifizieren.


Praktische Beispiele

Hier ist ein einfaches Beispiel für die Implementierung von Sleep in Deinem VBA-Code:

Sub InitializeForm()
    Application.EnableEvents = False
    Call Sleep(100) ' 100 Millisekunden warten
    ' Initialisiere Deine Userform hier
    UserForm1.Show
    Application.EnableEvents = True
End Sub

Nutze die Sleep-Funktion, um sicherzustellen, dass Excel genügend Zeit hat, bevor kritische Operationen ausgeführt werden.


Tipps für Profis

  • Verwende DoEvents strategisch: Setze DoEvents nur an Stellen ein, an denen es wirklich notwendig ist. Es kann die Performance Deines Makros beeinträchtigen, wenn es zu oft verwendet wird.

  • Debugging verbessern: Nutze die Debug.Print-Anweisung, um Variablenwerte in der Immediate Window anzuzeigen, anstatt ständig MsgBox-Fenster zu verwenden.

  • Code modularisieren: Halte Deinen Code so modular wie möglich, indem Du Funktionen und Subroutinen verwendest. Dies erleichtert das Debugging und die Fehlersuche.


FAQ: Häufige Fragen

1. Was bedeutet der Fehler "das aufgerufene objekt wurde von den clients getrennt"?
Dieser Fehler tritt auf, wenn Excel versucht, auf ein Objekt zuzugreifen, das nicht mehr verfügbar ist oder von einem anderen Prozess verwendet wird.

2. Warum hilft Application.EnableEvents nicht?
EnableEvents deaktiviert nur bestimmte Ereignisse in Excel. Es kann sein, dass andere Ereignisse, wie z.B. ComboBox_Change, weiterhin ausgeführt werden und somit den Fehler verursachen.

3. Wie kann ich die Sleep-Funktion in 32-Bit und 64-Bit-Systemen verwenden?
Verwende die bereitgestellte Deklaration, die die richtige Version je nach System automatisch auswählt. Achte darauf, dass Du Sleep im richtigen Kontext aufrufst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige