Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1152to1156
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

Error 1004 'Copy Method of Worksheet Class failed'

Error 1004 'Copy Method of Worksheet Class failed'
André
Hallo zusammen,
nach etlichen, vergeblichen Unternehmungen den "Copy Method of Worksheet Class failed" Fehler
zu beheben bzw. zu umgehen, hoffe ich, dass ihr mir helfen könnt.
Mit einem Messprogramm wird jeden Tag eine Datei mit einigen Hundert Werten in einem Ordner erstellt. Diesen Ordner lade ich nach einigen Wochen nun in Excel, wobei mit meinem Makro
Sub Blattkopieren() jeweils die Datei eines Tages in eine Vorlage kopiert wird, mit deren Hilfe aus den Messwerten ein Tagesmittel gebildet wird.
ThisWorkbook.Sheets("Vorlage").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Im Prinzip ist also 1 Tag = 1 Worksheet, das erstellt und kopiert werden muss. Das viele Kopieren bringt Excel dann zu diesem Error 1004 in der obigen Zeile. Microsoft gibt auf ihrer Support-Seite (http://support.microsoft.com/kb/210684/en-us) als Problemlösung folgendes an:
 To resolve this problem, save and close the workbook periodically while the copy process is  _
occurring, as in the following sample code:
Sub CopySheetTest()
Dim iTemp As Integer
Dim oBook As Workbook
Dim iCounter As Integer
' Create a new blank workbook:
iTemp = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
Set oBook = Application.Workbooks.Add
Application.SheetsInNewWorkbook = iTemp
' Add a defined name to the workbook
' that RefersTo a range:
oBook.Names.Add Name:="tempRange", RefersTo:="=Sheet1!$A$1"
' Save the workbook:
oBook.SaveAs "c:\test2.xls"
' Copy the sheet in a loop. Eventually,
' you get error 1004: Copy Method of
' Worksheet class failed.
For iCounter = 1 To 275
oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
'Uncomment this code for the workaround:
'Save, close, and reopen after every 100 iterations:
If iCounter Mod 100 = 0 Then
oBook.Close SaveChanges:=True
Set oBook = Nothing
Set oBook = Application.Workbooks.Open("c:\test2.xls")
End If
Next
End Sub

Note The number of times you can copy a worksheet before you must save the workbook varies with the size of the worksheet.
Verkürzt ist also meine Frage: Wie wende ich dieses Beispiel auf mein Makro an? Meine (fehlerhafte) Variante habe ich in // dazugeschrieben. Für eure Hilfe wäre ich sehr dankbar!
Beste Grüße,
André
PS: Danke an den User 'Dirk aus Dubai' für seine bisherigen Hilfestellungen!

Sub BlattKopieren()
Application.ScreenUpdating = False
Dim lngR As Long, lngLast As Long, lngFirst As Long
Dim intC As Integer
Dim iTemp As Integer
Dim oBook As Workbook
Dim iCounter As Integer
Dim MeineAusgabeDatei as string
MeineAusgabeDatei = "d:\My Documents\V_Messauswertung_automatisch1.xls"
Application.DisplayAlerts = False
Application.EnableEvents = False
Set oBook = Application.Workbooks.Open(MeineAusgabeDatei) //
lngFirst = 13
intC = 2
With ThisWorkbook.Sheets("Dokumentation")
lngLast = Application.Max(.Cells(Rows.Count, intC).End(xlUp).Row, lngFirst)
For lngR = lngFirst To lngLast
If IsValidSheetName(.Cells(lngR, intC).Text) And Not SheetExist(.Cells(lngR, intC).Text) _
Then
ThisWorkbook.Sheets("Vorlage").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets. _
Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = .Cells(lngR, intC).Text
Range("A1").QueryTable.Connection = "TEXT;" & .Cells(lngR, 1).Text
Range("A1").QueryTable.TextFilePlatform = 850
Range("A1").QueryTable.TextFileStartRow = 1
Range("A1").QueryTable.TextFileParseType = xlDelimited
Range("A1").QueryTable.TextFileTextQualifier = xlTextQualifierDoubleQuote
Range("A1").QueryTable.TextFileConsecutiveDelimiter = False
Range("A1").QueryTable.TextFileTabDelimiter = True
Range("A1").QueryTable.TextFileSemicolonDelimiter = False
Range("A1").QueryTable.TextFileCommaDelimiter = False
Range("A1").QueryTable.TextFileSpaceDelimiter = False
Range("A1").QueryTable.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
Range("A1").QueryTable.TextFileDecimalSeparator = "."
Range("A1").QueryTable.TextFileThousandsSeparator = ","
Range("A1").QueryTable.Refresh
End If
// If lngr Mod 48 = 0 Then
oBook.Close SaveChanges:=True
Set oBook = Nothing
Set oBook = Application.Workbooks.Open(MeineAusgabeDatei)
End If //
Next
End With
Application.Run "'V_Messauswertung_automatisch1.xls'!CopyPaste"
End Sub
Die Application:
Sub CopyPaste()
Dim lngRow As Long
Sheets.Add After:=Sheets("Dokumentation")
Sheets("Dokumentation").Select
lngRow = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(13, 5), Cells(lngRow, 6)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Select
Range("A13").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False,  _
Transpose:=False
Dim Sh As Worksheet
Application.DisplayAlerts = False
For Each Sh In Worksheets
If Sh.Name  "Sheet1" And Sh.Name  "Dokumentation" Then Sh.Delete
Next Sh
Application.DisplayAlerts = True
Sheets.Add
Sheets("Sheet1").Select
Range(Cells(13, 1), Cells(lngRow, 2)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Dokumentation").Select
Range("E13").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Dim S As Worksheet
Application.DisplayAlerts = False
For Each S In Worksheets
If S.Name  "Dokumentation" Then S.Delete
Next S
Application.DisplayAlerts = True
Range("H13").Select
End Sub



		
AW: Error 1004 'Copy Method of Worksheet Class failed'
27.04.2010 11:03:19
André
Hallo Hajo,
ist geschehen, wobei mir die Ursache für Deinen Hinweis nicht ganz klar ist.
Grüße,
André
AW: Error 1004 'Copy Method of Worksheet Class failed'
27.04.2010 11:06:06
Hajo_Zi
Hallo André,
ich dachte der Hinweis reicht.
http://hajo-excel.de/crossposting.htm
Gruß Hajo
Anzeige
AW: Error 1004 'Copy Method of Worksheet Class failed'
27.04.2010 11:47:14
André
Hallo Hajo,
hättest du noch etwas weiter recherchiert, hättest du gesehen, dass mein Beitrag im Herber Forum schon über eine Woche existiert und ich den Thread wegen der Auto-Archivierung erneuern musste, um die Diskussion weiterzuführen. Den Schuh ziehe ich mir also nicht an.
Grüße,
André
AW: Error 1004 'Copy Method of Worksheet Class failed'
27.04.2010 12:01:37
Hajo_Zi
Hallo André,
hättest Du genau gelesen, dann wäre Dir aufgefallen das ich nicht vom gleichen Forum geschrieben habe.
Gruß Hajo
AW: Error 1004 'Copy Method of Worksheet Class failed'
27.04.2010 13:07:52
André
Hallo Hajo,
ich weiß von welchem Forum du sprichst, nur ist das für mich kein Cross-Posting im eigentlichen Sinne. Ich zitiere deine Homepage:
...Es wird in den Foren nicht auf Deine Frage gewartet, also kann es schon mal paar Minuten oder bei umfangreichen Problemen Stunden dauern, bis Deine Antwort erstellt ist. Also warte doch bitte eine gewisse Zeit, bevor Du die Frage in einem anderen Forum stellst. Ich selber habe mir da eine persönliche Grenze gestellt: ich warte ca. einen Tag, bevor ich meine Frage in einem anderen Forum stelle.
Dies hier ist lediglich die von J. Herber genehmigte Weiterführung des alten Themas (https://www.herber.de/forum/archiv/1152to1156/t1152653.htm), da eine Reaktivierung des auto-archivierten Themas technisch nicht möglich ist. Das Thema war hier also über eine Woche offen, da ist es doch legitim, auch anderweitig Hilfe zu suchen? Die Wiedereröffnung hier erfolgte übrigens mit der Hauptabsicht, zu dem hilfsbereiten User des archivierten Beitrages Kontakt aufzunehmen. Dies ist über eMail/private Nachricht hier meiner Erkenntnis nach nicht möglich, falls doch, darfst du mich gerne darüber aufklären.
Davon mal abgesehen, hatte ich nie vor mehrere Leute an dem Problem arbeiten zu lassen, sondern wollte lediglich ein größeres Publikum ansprechen, da ich hier nach einer Woche nicht wirklich vorangekommen bin. Wenn dich die Existenz des Threads in deinem Forum stört, lösche ihn doch bitte.
Gruß André
Anzeige
AW: Error 1004 'Copy Method of Worksheet Class failed'
27.04.2010 12:04:20
fcs
Hallo Andre,
mangels Kommentaren in deinen Prozeduren blickt man nicht durch was wo hin kopiert werden soll bzw. in welcher Arbeitsmape Tabellenblätter kopiert/eingefügt werden soll. Es gibt die Workbook-Objektvariable "oBook" und es taucht vielfach "ThisWorkbook" auf, auf die Bezug genommen wird.
Folgende Hinweise:
Thisworkbook = Die Arbeitsmappe in der das Makro gespeichert ist
Dateien mit identischem Namen können in Excel nur einmal geöffnet werden, auch wenn sie in unterschiedlichen Verzeichnissen liegen.
Sehr wichtig:
Soll eine Datei während des Makroablaufs geschlossen und wieder geöffnet werden, dann darf das zugehörige Makro nicht in dieser Datei gespeichert sein.
So wie ich das sehe
  • - muss du das Makro zur Steuerung des Einlesens und Aktualisierens der Daten in einer separaten Datei speichern,

  • - muss du die abzuarbeitende Dokumentliste zu Beginn des Makros in ein Datenarray einlesen und die Liste Abarbeiten, statt die Zeilen im Blatt "Dokumente".

  • Gruß
    Franz
    Anzeige
    AW: Error 1004 'Copy Method of Worksheet Class failed'
    27.04.2010 13:22:30
    André
    Hallo Franz,
     Sehr wichtig:
    Soll eine Datei während des Makroablaufs geschlossen und wieder geöffnet werden, dann darf das zugehörige Makro nicht in dieser Datei gespeichert sein. 
    
    Widerspricht sich das nicht mit dem Beispiel im Microsoft Support?
    Also der Teil in den // ist mein (nicht funktionierender Versuch) den Ratschlag von Microsoft auf mein Workbook anzuwenden. Lässt man den Teil weg, funktioniert das Workbook hervorragend, jedoch eben nur für eine auf ca. 50 Worksheets bzw. Datensätze limitiert, da dann der Copy-Fehler erscheint.
    Ich würde daher den Grundaufbau des Programmes gerne beibehalten, es muss doch irgendwie mit dem Support-Tipp funktionieren.
    https://www.herber.de/bbs/user/69201.xls
    https://www.herber.de/bbs/user/69200.txt (in .lvm umändern)
    Hier ist die Tabelle und eine Testdatei, falls du dir die Zeit nehmen möchtest, mal zu schauen, wie das Workbook arbeitet.
    Grüße,
    André
    Anzeige
    AW: Error 1004 'Copy Method of Worksheet Class failed'
    27.04.2010 18:13:16
    fcs
    Hallo André,
    das ist jetzt schon etwas komplizierter geworden, den Ablauf hinzubekommen.
    Es geht nur, wenn das Makro in einer externen Datei ist. Ich hab es jetzt so ein gerichtet, dass die Datei von dem Button "Schritt 3" geöffnet wird. In der Prozedur zu diesem Button muss du ggf. den Pfad zu "MessdatenMakro.xls" anpassen.
    Die CoypPaste - Prozedur hab ich auch vereinfacht. Formeln durch Werte ersetzen kann man etwas einfacher realisieren. Diese Prozedur ist sowohl in "MessdatenMakro.xls" enthalten, als auch in deiner ursprünglichen Datei. Du kannst wahlweise direkt im Anschluß des Ladens der Daten diese Prozedur starten oder zu einem späteren Zeitpunkt.
    Nach jeweils 30 importierten Dateien wird zwischengespeichert. Bei mir trat der Fehler schon bei weniger als 40 Importen auf.
    Wichtig:
    1.)Starte Excel neu, bevor du den Datenimport beginnst. Ich hatte versucht, zweimal den Import zu starten. Da gab's Probleme und die Datei war nach einem Excel-Reparaturversuch hinüber.
    2.) Die Datei "MessdatenMakro.xls" muss geschlossen sein, bevor du den Import startest.
    Gruß
    Franz
    https://www.herber.de/bbs/user/69266.zip
    Anzeige
    AW: Error 1004 'Copy Method of Worksheet Class failed'
    28.04.2010 11:59:04
    André
    Hallo Franz,
    die Benutzerführung finde ich bei deinem Vorschlag sehr elegant, allerdings kann ich keine Verbesserung in der Funktion feststellen.
    a) zugelassene Anzahl an Dateien, bis Fehler 1004 und/oder 009 auftritt ist ungefähr gleich geblieben
    b) bei erneutem Einfügen in das gleiche Sheet werden die alten Werte überschrieben bzw. ein zweites Ausführen des Kopiervorganges ist nicht möglich (wie du erwähnt hattest, jedoch sollte dies in der Endfassung möglich sein; dafür müsste man wohl lngfirst = letzte beschriebene zelle+1 wählen)
    Beste Grüße,
    André
    AW: Error 1004 'Copy Method of Worksheet Class failed'
    28.04.2010 16:21:09
    fcs
    Hallo Andi,
    ich hab auf meinem System, Windows XP, Office 2003, 512 MB Arbeitsspeicher, mit 60 lvm-Dateien getestet.
    Bis auf die Einschränkung - Excel vor dem Import neu starten - klappt das.
    Es gibt aber auch noch ein Limit für die Gesamtzahl an Tabellenblättern in einer Arbeitsmappe. Dies ist bei Excel2003 meines Wissens bei ca. 255.
    Der Fehler 009 muss aber irgendeine andere Ursache haben.
    Wie die Daten nach dem Import weiter verarbeitet werden sollen ist halt bisher immer noch relativ unklar.
    Jedenfalls führt dein Copy_Paste-Makro dazu, dass am Ende nur noch das Diagramm-Blatt und das Blatt "Dokumentation vorhanden sind.
    Da solltest du erst einmal einen sauberen Ablaufplan machen, wie die Daten weiter verarbeitet werden sollen.
    Gruß
    Franz
    Anzeige
    AW: Error 1004 'Copy Method of Worksheet Class failed'
    28.04.2010 17:05:22
    André
    Hallo Franz,
    aber mit z.B. 200 lvm-Dateien funktioniert es bei dir dann auch nicht mehr oder? Das soll das Workbook leisten können, da es sich um die Auswertung von Langzeitmessungen handelt. und da häufig mehrere Monate "auf einen Schlag" ausgewertet werden müssen. Ich benutze auch XP und Office 2003, habe das Workbook auch auf unterschiedlichen Rechnern getestet, die Fehler traten dennoch auf.
    Der Ablauf ist im Prinzip nur:
    Ordner mit den *.lvm Dateien auswählen und in das Sheet Dokumentation laden.
    Bei der Auswertung wird dann eine Tagesdatei in das Sheet Vorlage geladen, der Tagesmittelwert gebildet und ins Sheet 'Dokumentation' geschrieben. Dies wiederholt sich dann, bis alle .lvm Dateien abgearbeitet sind.
    Das Copy/Paste Makro dient dazu, den Speicherbedarf gering zu halten, das Erreichen des Sheetmaximums zu verhindern und das Handling zu verbessern, da die Tabellen, sobald sie einmal ausgelesen sind, nicht mehr benötigt werden.
    Gruß,
    André
    Anzeige
    AW: Error 1004 'Copy Method of Worksheet Class failed'
    28.04.2010 18:16:41
    fcs
    Hallo Andre,
    dann solltest du anders vorgehen.
    In der Vorlage -hab ich in der Datei in "Data_lvm" umbenannt- wird immer nur die Datenverknüpfung geändert. Anschließend wird der Mittelwert ausgelesen und in die Tabelle "Dokumentation" eingetragen und dann die nächste lvm-Datei verknüpft.
    Ich hab es mit 120 Dateien probiert, lief problemlos. Hier sollte es eigentlich kein Limit mehr geben.
    Das mit der Ordner-Auswahl verknüpfte Makro erstellt hier auch die Formeln für Spalten B bis D und sortiert nach dem Datum.
    Gruß
    Franz
    https://www.herber.de/bbs/user/69283.xls
    Anzeige
    AW: Error 1004 'Copy Method of Worksheet Class failed'
    29.04.2010 10:26:17
    André
    Hi Franz,
    wow, das sieht richtig gut aus, pfiffige Lösung :)
    Lief bei mir jetzt auch mit 200+ Dateien problemlos und vielfach schneller als bisher. Tausend Dank dafür!
    Eine Kleinigkeit hätte ich noch. Ich hab das auto-save mal rausgenommen, da nach 2, 3 maligem Benutzen des Workbooks (auch mit close/re-open) als Mittelwerte nur noch Nullen erscheinen. Ohne close/re-open kann ich dagegen nur einen Vorgang ausführen, beim zweiten erscheinen nur Nullen als Mittelwerte. Woran mag das liegen?
    Beste Grüße,
    André
    AW: Nur 0-Werte nach Connection Refresh
    29.04.2010 16:39:33
    fcs
    Hallo Andre,
    die Ursache kenne ich nicht.
    Was passiert, wenn du das Datenholen im Schrittmodus ausführts und nach der .Refresh-Anweisung eine kurze Pause machst?
    Evtl. ist das Makro zu schnell und wartet den Abschluss des .Refresh nicht ab.
    Mir ist jetzt allerdings aufgefallen, dass die Ordnerauswahl nicht optimal ist. Man kann keinen anderen Ordner nur wählen, wenn Zelle F3 leer ist.
    Ich hab das mal geändert. In F2 kann man einen Ordner eingeben in dem der Ordner-Auswahldialog starten soll, wenn F3 einen Wert enthält.
    Gruß
    Franz
    https://www.herber.de/bbs/user/69303.xls
    Anzeige
    AW: Nur 0-Werte nach Connection Refresh
    29.04.2010 17:42:31
    André
    Hallo Franz,
    stimmt, das mit dem Ordner war auch noch ein kleiner Makel, danke dafür.
    Habe jetzt einige Durchläufe im Schrittmodus gemacht, intensiv beobachtet und die Stelle für den Fehler ausfindig gemacht.
    Für jeden Datenimport nach dem ersten springt das DatenHolen()-Makro beim .Refresh im Data_lvm-Sheet um zwei Spalten nach rechts. Somit holt wksDokuments.Cells(lngR, 5) = wksData.Range("J12") nun die leeren Zellen aus J12, die beschriebenen befinden sich in L12. Beim dritten Import dann in N12 usw.
    Leider ist mir weiterhin schleierhaft, woran das liegen mag. Knacken wir das Problemchen noch oder lassen wir es gut sein ;) ?
    Grüße,
    André
    AW: Nur 0-Werte nach Connection Refresh
    30.04.2010 01:16:13
    fcs
    Hallo André,
    evtl. solltest du den Bereich mit den Abfragedaten ein paar Zeilen nach unten verschieben und die Zellen mit den Formeln zur Berechnung oberhalb der Abfragedaten anordnen.
    Im Makro muss du dann natürlich die entsprechenden Zelladressen anpassen.
    Gruß
    Franz

    96 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige