Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Automatisierungsfehler

Automatisierungsfehler
08.09.2014 22:18:23
Chris
Hallo zusammen,
per Autofilter möchte ich von einem Sheet Werte in ein anderes kopieren, ohne das beide Sheets aktiviert sind.
Excel "flackert" zwischen den beiden Sheets, danach kommt der Hinweis auf einen Automatiserungsfehler und Excel stürzt ab.
Dieses Makro steht bei im Sheet "Erfassung" in der Activate-Prozedur:
Sheets("FilImport").Range("E9:J710").ClearContents
Sheets("Import").Range("Q6:V707").AutoFilter Field:=1, Criteria1:="1"
Sheets("Import").Range("R6:W707").Copy
Sheets("FilImport").Range("E8").PasteSpecial (xlPasteValues)
Ich habe einen Haltepunkt gesetzt, der Fehler scheint bei dem PasteSpecial zu liegen, da bis ....Copy alles normal läuft.
Hat jemand einen Vorschlag wie ich diesen Fehler lösen kann?
Danke Chris

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisierungsfehler
08.09.2014 23:26:28
Daniel
Hi
Das xlPasteValues hier ohne Klammer.
Bei einem direkten Befehlsaufruf werden die Parameter nicht in Klammern gesetzt.
Das PasteSpecial selektiert die eingefügten Zellen und löst damit auch entsprechende Events aus.
Hast du Event-Makros, die hier betroffen sein könnten?
Gruß Daniel

AW: Automatisierungsfehler
09.09.2014 07:37:47
Chris
Hallo Daniel,
Dein Vorschlag ohne Klammer funktioniert leider nicht - es flackert weiterhin und der Code bricht ab mit "Automatisierungsfehler - das Objekt wurde von den Clients getrennt."
Ich schicke mal die Makro, die sich im Sheet "Erfassung" befinden:
Private Sub Worksheet_Activate()
ActiveSheet.EnableAutoFilter = False
DisplayHorizontalScrollBar = False
DisplayVerticalScrollBar = False
'Sheets("Erfassung").ScrollArea = "A1:N32"
Range("H4").NumberFormat = "0000" 'ID Groß
Range("H4").Activate
Range("G8").WrapText = True
Range("A101").FormulaLocal = "=SVERWEIS(H4;Filimport!E9:K707;7;FALSCH)"
Sheets("FilImport").Range("E9:J710").ClearContents
Sheets("Import").Range("Q6:V707").AutoFilter Field:=1, Criteria1:="1"
Sheets("Import").Range("R6:W707").Copy
Sheets("FilImport").Range("E8").PasteSpecial xlPasteValues
Set adr = Worksheets("FilImport").Range("J9:J709")
Set adr2 = Worksheets("FilImport").Range("I9:I709")
If Sheets("FilImport").Range("J9").Value = "INAKTIV" Then Range("E9:J9").ClearContents
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("H4").Value = 0 Then Exit Sub Else Call NoReturn
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set bereich = Range("A:ZZ")
If Application.Union(Target, bereich).Address = bereich.Address Then Range("H4").Select
End Sub

Anzeige
AW: Automatisierungsfehler
09.09.2014 07:53:45
Chris
Hallo Daniel,
Dein Vorschlag ohne Klammer funktioniert leider nicht - es flackert weiterhin und der Code bricht ab mit "Automatisierungsfehler - das Objekt wurde von den Clients getrennt."
Ich schicke mal die Makro, die sich im Sheet "Erfassung" befinden:
Private Sub Worksheet_Activate()
ActiveSheet.EnableAutoFilter = False
DisplayHorizontalScrollBar = False
DisplayVerticalScrollBar = False
'Sheets("Erfassung").ScrollArea = "A1:N32"
Range("H4").NumberFormat = "0000" 'ID Groß
Range("H4").Activate
Range("G8").WrapText = True
Range("A101").FormulaLocal = "=SVERWEIS(H4;Filimport!E9:K707;7;FALSCH)"
Sheets("FilImport").Range("E9:J710").ClearContents
Sheets("Import").Range("Q6:V707").AutoFilter Field:=1, Criteria1:="1"
Sheets("Import").Range("R6:W707").Copy
Sheets("FilImport").Range("E8").PasteSpecial xlPasteValues
Set adr = Worksheets("FilImport").Range("J9:J709")
Set adr2 = Worksheets("FilImport").Range("I9:I709")
If Sheets("FilImport").Range("J9").Value = "INAKTIV" Then Range("E9:J9").ClearContents
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("H4").Value = 0 Then Exit Sub Else Call NoReturn
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set bereich = Range("A:ZZ")
If Application.Union(Target, bereich).Address = bereich.Address Then Range("H4").Select
End Sub

Anzeige
AW: Automatisierungsfehler
09.09.2014 09:48:06
Daniel
ok fangen wir mal am Anfang an, bevor wir in die Details gehen:
Ich habe den Code bei mir in eine leere Datei kopiert, die Blätter entsprechend benannt und versucht die Makros ans laufen zu bringen.
bei läuft gar nichts, ich bekomme die Fehlermeldung:
"Variable nicht deklariert" für "DisplayHorizontalScrollbar = False"
Private Sub Worksheet_Activate()
ActiveSheet.EnableAutoFilter = False
DisplayHorizontalScrollBar = False
DisplayVerticalScrollBar = False

was bedeuten hier die letzten zwei Zeilen?
Soll das eine Variablenzuweisung sein? - dann fehlt die Deklaration der Variablen
Möchtest du die Scrollbars ausschalten? - dann fehlt das "ActiveWindow." davor.
grundsätzlich sind deine Variablen nicht deklariert.
Arbeitest du nicht mit Option Explicit?
Wenn nein, solltest du das tun.
Warum und wieso steht hier: http://www.online-excel.de/excel/singsel_vba.php?f=4
Stelle erstmal um aufs Arbeiten mit Option Explicit und deklariere deine Variablen, dann kann man mal weiterschauen.
Gruß Daniel

Anzeige
AW: Automatisierungsfehler
09.09.2014 12:22:24
Chris
Hallo Daniel,
DisplayHorizontalScrollBar = False
DisplayVerticalScrollBar = False
bedeutet, dass die Scrollbalken nicht angezeigt werden und läuft ohne Probleme.. Allerdings ist das nicht wichtig, dient nur der Optik. Kann auch weggelassen werden. Option Explicit habe ich probiert, Excel hat nachwievor keinen Bock und gibt einen Automatisierungsfehler bekannt...
Nun habe ich ein wenig herumprobiert. Das Problem liegt aus irgendwelchen Gründen hier in der letzten Zeile:
Sheets("FilImport").Range("E8").PasteSpecial xlPasteValues
PasteValues in ein Sheet das nicht angezeigt wird in Verbindung mit Autofilter geht nicht. Wieso weiss ich nicht.
Was allerdings ohne Fehler läuft ist:
Sheets("Import").Range("R6:W707").Copy Sheets("FilImport").Range("E8")
Nun dachte ich, das Problem sei gelöst. Die Daten aus der Quelle (R6:W707) werden jedoch per Formel ermittelt, sodass bei ....Copy Sheets....die Formel kopiert wird und dann im Sheet "Filimport" die jeweilige Formel drin stehen mit "#Bezug" als Zelleninhalt.
Gibt irgendeine Möglichkeit hier zu sagen, kopiere nur die Werte?
Sheets("Import").Range("R6:W707").Copy Sheets("FilImport").Range("E8")
Chris

Anzeige
AW: Automatisierungsfehler
09.09.2014 12:49:15
Daniel
Hi
ich hab ja auch nicht gesagt, dass Option Explicit dein spezielles Problem löst.
Du solltst nur generell mit Option Explicit arbeiten und deine Variablen deklarieren.
Dein Progblem ist folgenendes (zumindest stellt es sich für mich so dar, wenn ich im Einzelstep teste)
der Befehl: Sheets("FilImport").Range("E8").PasteSpecial xlPasteValues selektiert intern das Sheet Import und den Zellbereich mit den eingefügten Daten (intern heißt, ohne dass es für dich sichtbar wird) und springt dann zum alten Blatt "Erfassung" zurück.
Durch diesen Rücksprung wird aber wieder das Activate-Event des Sheets "Erfassung" ausgelöst und du befindest dich in einer Endlosschleife.
Beim Einzeile Copy-Destination wird diese Selektion nicht ausgeführt, damit gibt es keinen Rücksprung und damit auch kein rekursives Auslösen des Activate-Events.
Nur kannst du das nicht verwenden, weil Copy-Destination nicht in der Lage ist, nur Werte einzufügen, da brauchst du schon das PasteSpecial.
du hast zwei Lösungsmöglichkeiten:
a) die Ausführung der Events ausschalten, um den Rekursiven Aufruf und die Endlosschleife zu vermeiden:
Application.EnableEvents = False
Sheets("FilImport").Range("E8").PasteSpecial xlPasteValues
Application.EnableEvents = True
b) Statt Copy-PasteSpecial überträgst du die Werte mit direkter Wertzuweisung:
Sheets("FilImport").Range("E8:J709").Value = Sheets("Import").Range("R6:W707").Value

bei dieser Methode musst du darauf achten, dass Ziel- und Quellzellberich gleich gross sind!
bei Copy-PasteSpecial reicht es, die linke obere Ecke des Zielbereichs anzugeben.
Gruß Daniel

Anzeige
AW: Automatisierungsfehler
09.09.2014 13:46:52
Chris
Hallo Daniel,
Option Explicit - ok, werde ich in Zukunft machen :-)
Bei Sheets("FilImport").Range("E8:J709").Value = Sheets("Import").Range("R6:W707").Value habe ich das Problem, dass immer alle Daten kopiert werden, da der Bereich ja immer gleich groß sein muss - wie du schon sagst.
Deshalb ist
Application.EnableEvents = False
Sheets("FilImport").Range("E8").PasteSpecial xlPasteValues
Application.EnableEvents = True
die richtige Variante, die auch funktioniert. Dank!
Chris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige