Laufzeitfehler 1004: Die methode copy

Hallo an Alle,

ich habe aus mehrere Seiten folgende Makros zusammengestellt. Im Prinzip funktioniert das Makro aber immer nach 20 Iterationen kommt die Laufzeitfehler 1004: Die Methode ‚Copy‘ für das Object ‚_Worksheet‘ ist fehlgeschlagen. DAS Makro fügt mehrere Arbeitblätter in einer Mappe. Ich arbeite mir Excel 2003. Ich habe probiert eine Schleife zu stellen, damit das blatt sich schließt und wieder öffnet, so wie im microsoft bsp. Aber ich denke ich setze sie nie richtig, den dir fehler tritt immer auf. kann mir jemand dabei helfen?
Hier ist das Code
(pre)
Sub Import()

Dim VerzVar As String
Dim Pfadname As String
Dim ZielMappe As Workbook
Dim QuellMappe As Workbook
Dim i As Worksheet
Dim iName As String

Pfadname = „H:\Probe“
VerzVar = Dir(Pfadname & „*.xl*“)
Set ZielMappe = ThisWorkbook

Do While VerzVar „“

UserFile = Pfadname & VerzVar
Set QuellMappe = Workbooks.Open(Filename:=UserFile)
For Each i In Sheets

If i.Visible = xlSheetVisible Then
iName = i.Name
Application.DisplayAlerts = False
QuellMappe.Sheets(iName).Copy After:=ThisWorkbook.Sheets(1)
Application.DisplayAlerts = True
Else

End If
Next
VerzVar = Dir()
QuellMappe.Close SaveChanges:=False
Loop
End Sub
(/pre)
Dankein Vorraus!!

Hallo,

dein Problem mit kopieren unter Excel 2003 ist mikrosoft bekannt (siehe http://support.microsoft.com/kb/210684/de).
Dort ist beschrieben, dass man die Zieldatei nach bestimmten iteraktionen speichern, schliessen und wieder zu öffnen ist. Dieses ist sehr abhängig von deinem verfügbaren Arbeitsspeicher, sodass nicht wie im Beispiel alle 100 iterationen dieses geschehen sollte, sondern bei dir schon viel eher passieren muss zB. 15x.
Eine Umstellung auf einen höhere Excel-Version wäre nur dann ratsam, wenn du dein Programm regelmäßig einsetzen muss.

Wo ständig zwischen verschiedenen Arbeitsmappen gewechselt wird, ist eine eindeutige Zuweisung der Arbeitsmappen in den Befehlcode wichtig. Zwar erhält eine mit OPEN geöffnete Datei den Fokus, nur so ein PC zeitenweise ist mit vielen Hintergrundfunktionen beschäftigt, dass die geöffnete Datei noch nicht den Fokus im nächsten Befehl hat oder das die Datei noch nicht ganz geladen ist. Die Zeile ‚For Each i In Sheets‘ sollte daher ‚For Each i In QuellMappe.Sheets‘ heißen.

Vor der Do… Loop Schleife solltest du noch Application.ScreenUpdate=False (nach Loop… Application.ScreenUpdate=True) einfügen. Es verhindert das ständige Umschalten zwischen den verschiedenen Arbeitsmappen.

Sub Import()

Dim VerzVar As String
Dim Pfadname As String
Dim ZielMappe As Workbook
Dim QuellMappe As Workbook
Dim i As Worksheet
Dim iName As String

Pfadname = „H:\Probe“
VerzVar = Dir(Pfadname & „*.xl*“)
Set ZielMappe = ThisWorkbook

Do While VerzVar „“

UserFile = Pfadname & VerzVar
Set QuellMappe = Workbooks.Open(Filename:=UserFile)
For Each i In Sheets

If i.Visible = xlSheetVisible Then
iName = i.Name
Application.DisplayAlerts = False
QuellMappe.Sheets(iName).Copy After:=ThisWorkbook.Sheets(1)
Application.DisplayAlerts = True
Else

End If
Next
VerzVar = Dir()
QuellMappe.Close SaveChanges:=False
Loop
End Sub

Andreas