Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
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

Run-Time Error 1004 unüberwindbare Hürde

Run-Time Error 1004 unüberwindbare Hürde
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.
Ziel ist es, eine möglichst große Zeitspanne (min. 1/2 Jahr) von täglichen Messdaten auswerten zu können. In meiner jetzigen Version kommt nach ca. 50 Tagen der Run-Time Error.
Mein Vorhaben, nach diesen 50 Tagen die Werte in eine neue Tabelle auszulagern, die alte zu schließen und in der neuen die nächsten 50 Tage einzulesen (etc.), scheitert dennoch am gleichen Fehler.
Die Anweisung des MS-Supports (http://support.microsoft.com/kb/210684/en-us) konnte ich bisher ebenfalls nicht funktionierend in das Sub Blattkopieren() einbauen. Für eure Hilfe wäre ich sehr dankbar!
Grüße André

Sub BlattKopieren()
Application.ScreenUpdating = False
Dim lngR As Long, lngLast As Long, lngFirst As Long
Dim intC As Integer
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
Next
End With
Application.Run "'V_Messauswertung_automatisch1.xls'!CopyPaste"
Application.Run "'V_Messauswertung_automatisch1.xls'!cmd_WorkbookSave_Click"
End Sub

Die Applications:
Sub cmd_WorkbookSave_Click()
Sheets("Dokumentation").Select
Application.CutCopyMode = False
Range("A1:G1641").Select
Selection.Copy
Workbooks.Open Filename:=ThisWorkbook.path & "\V_Messauswertung_automatisch2.xls" '
Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False,  _
Transpose:=False
Application.CutCopyMode = False
Worksheets(1).Name = "Dokumentation"
Workbooks("V_Messauswertung_automatisch1.xls").Close SaveChanges:=False
Range("H13").Select
End Sub

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: Run-Time Error 1004 unüberwindbare Hürde
Dirk
Hallo Andre,
hast Du mal die Macros im einzelschritt durchlaufen lassen? Falls ja in welchem Macro und in welcher Zeile kommt der fehler?
Mal nebenbei: Die Datei "\V_Messauswertung_automatisch2.xls" existiert schon oder moechtest Du diese Erstellen? Falls letzteres musst Du Deiine aktuelle Datei unter diesem Namen speichern, da sonst die Datei nicht gefunden werden kann.
Gruss
Dirk aus Dubai
AW: Run-Time Error 1004 unüberwindbare Hürde
20.04.2010 09:33:15
André
Hallo Dirk,
also die Makros funktionieren solange, bis ich Messdaten laden möchte die über 50 Tage hinaus gehen, da dann der Error 1004 auftritt. Die "\V_Messauswertung_automatisch2.xls" hatte ich in der Hoffnung angelegt, mir weitere 50 Tage zu "erkaufen". Funktioniert aber leider nicht, es bleibt bei dem Fehler. Und zwar in folgender Zeile aus dem Sub Blattkopiere():
ThisWorkbook.Sheets("Vorlage").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Gruß André
Anzeige
AW: Run-Time Error 1004 unüberwindbare Hürde
20.04.2010 09:40:59
Dirk
Hallo!
Ich habe das Problem mit den 50 Tagen noch nicht ganz begriffen. Was heisst "die uber 50 Tage hinausgehen"? Sind da Datumswerte oder ist das eine Menge von Daten?
Gruss
Dirk aus Dubai
AW: Run-Time Error 1004 unüberwindbare Hürde
20.04.2010 12:46:36
André
Mit einem Messprogramm wird jeden Tag eine Datei mit einigen Hundert Werten in einem Ordner erstellt. Diesen Ordner lade ich nun in Excel, wobei mit obigen Makros 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. Im Startbeitrag habe ich den Link zur _ Microsoft Hilfe für diesen Fehler gepostet.

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? Danke,
André
Anzeige
AW: Run-Time Error 1004 unüberwindbare Hürde
20.04.2010 13:44:32
Dirk
Hallo!
Eigentlich brauchst Du nur diesen Teil:
Sub CopySheets()
Dim iTemp As Integer
Dim oBook As Workbook
Dim iCounter As Integer
Dim MeineAusgabeDatei as string
'hier den Pfad un Dateinamen zur Ausgabedatei auf der Festplatte, (anlegen, falls noch nicht  _
vorhanden)
MeineAusgabeDate="c:\test.xls"
Set obook=Set oBook = Application.Workbooks.Open(MeineAusgabeDatei)
For iCounter = 1 To 275
'hier den wert setzen fuer die Anzahl der Sheets welche eingearbeitet werden sollen
oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
'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(MeineAusgabeDatei)
End If
Next
'Fertig
End Sub
Lass' mal hoeren, ob so ok.
Gruss
Dirk aus Dubai
Anzeige
AW: Run-Time Error 1004 unüberwindbare Hürde
20.04.2010 15:07:48
André
Hi Dirk,
danke für deine Ausdauer, aber das kann noch nicht des Rätsels Lösung sein. Das von dir gepostete Makro erzeugt im Workbook Test zahlreiche (leere) Kopien meines Ausgangsworksheets, bis es dann in der Zeile
oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
den gleichen Fehler erzeugt, den ich auch schon im ursprünglichen Makro hatte. Ich denke, man muss dein Makro irgendwie in diese Schleife einarbeiten:
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
Next
End With
Lngfirst ist die erste Messdatei bzw. Tag, Lnglast die letzte. Angenommen die letzte Messdatei ist 200. Wir wissen, dass nach ca. 50 Kopierschritten der 1004 Fehler auftritt. Demnach müsste man dort die Schleife unterbrechen und das aktuelle Workbook beenden&speichern (allerdings in eine andere Datei, da die Ursprungsdatei immer wieder neu beschrieben werden soll). Die bisherigen Werte müsste in ein neues Sheet geladen werden und automatisch Datei 51-100 bearbeitet werden. Nun wieder speichern&beenden usw.
Wie würdest du das von dir gepostete Makro in mein Makro Blattkopieren einbringen, um das beschriebene Ergebnis zu erzielen?
Grüße,
André
Anzeige
AW: Run-Time Error 1004 unüberwindbare Hürde
20.04.2010 15:46:17
Dirk
Hallo!
Mein Macro ist nur ein geruest...
Deines solltes Du folgendermassen aendern:
MeineAusgabeDatei = "d:\My Documents\MesswertDB.xls"
Application.DisplayAlerts = False
Application.EnableEvents = False
Set oBook = Application.Workbooks.Open(MeineAusgabeDatei)
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:=oBook.Sheets.Count
ThisWorkbook.Sheets(oBook.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
Falls Der 1004 immernoch kommt mus der Wert hinter MOD weiter reduziert werden.
Gruss
Dirk aus Dubai
Anzeige
AW: Run-Time Error 1004 unüberwindbare Hürde
20.04.2010 17:43:38
André
Guten Abend,
bei der Version geht er erst gar nicht die Schleife durch und gibt direkt den Run-Time Error 1004 in folgender Zeile:
ThisWorkbook.Sheets("Vorlage").Copy After:=oBook.Sheets.Count
Liegt vielleicht daran, dass es sich um zwei verschiedene Workbooks handelt?
Gruß André
AW: Run-Time Error 1004 unüberwindbare Hürde
21.04.2010 09:32:43
Dirk
Hallo Andre,
es waere einfacher mit Deiner Masterdatei.
Vieleicht klappt das ja so:
Sub BlattKopieren()
Application.ScreenUpdating = False
Dim lngR As Long, lngLast As Long, lngFirst As Long
Dim intC As Integer, OBook As Workbook
Dim MeineAusgabeDatei As String
lngFirst = 13
intC = 2
MeineAusgabeDatei = "d:\My Documents\MesswertDB.xls"
'hier den Pfad und Dateinamen der Ausgabedatei eintragen!!!!
Application.DisplayAlerts = False
Application.EnableEvents = False
Set OBook = ThisWorkbook
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:=OBook.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"
Application.Run "'V_Messauswertung_automatisch1.xls'!cmd_WorkbookSave_Click"
End Sub
MeineAusgabeDatei ist eine Kopie Deiner Datenbank, in welche die Blaetter eigefuegt werden sollen. Diese Kopie musst Du anlegen und den Pfad und Dateinamen entspreched eintragen (oder Auswahl via Benutzerdialog)
Lass' mal hoeren, ob ok.
Gruss
Dirk
Anzeige
AW: Run-Time Error 1004 unüberwindbare Hürde
21.04.2010 16:17:41
André
Hi,
dieser Code (Ausgabedatei natürlich angepasst) bewirkt:
Ursprungsdatei wird beschrieben bis Mod X = 0 erreicht ist, gespeichert und alle Sheets geschlossen. Ausgabedatei bleibt völlig außen vor.
Beste Grüße,
André
AW: Run-Time Error 1004 unüberwindbare Hürde
Dirk
Hallo Andre,
lade doch mal Deine Tabelle hoch und auch ein Beispiel der Tabellen, welche kopiert werden sollen. Das macht das Ganze schon viel eiunfacher.
Gruss
Dirk aus Dubai
AW: Run-Time Error 1004 unüberwindbare Hürde
25.04.2010 09:13:10
Dirk
Hallo Andre,
wie ist das Namensformat der datentabellen?
Danke und Gruss
Dirk aus Dubai

220 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige