Der Laufzeitfehler 1004 ist ein Fehlercode für Microsoft Visual Basic, von dem bekannt ist, dass er Microsoft Excel-Benutzer betrifft. Es ist bekannt, dass der Fehler in Excel 2003 und Excel 2007 am häufigsten auftritt, obwohl keine Version der beliebten Arbeitsblattanwendung von Microsoft für Computer vor der Bedrohung durch den Laufzeitfehler 1004 geschützt ist. In den meisten Fällen sehen Benutzer, die von diesem Problem betroffen sind, eine der folgenden zwei verschiedene Variationen des Laufzeitfehlers 1004. In ihrer Gesamtheit lauten die beiden Variationen des Laufzeitfehlers 1004:
" Laufzeitfehler '1004':
Kopiermethode der Arbeitsblattklasse fehlgeschlagen “
" Laufzeitfehler '1004':
Anwendungsdefinierter oder objektdefinierter Fehler “
Die genaue Fehlermeldung, die Sie sehen, kann in einigen Fällen auch geringfügig variieren, obwohl der Fehlercode gleich bleibt. Unabhängig davon, bei welcher Version des Problems ein Problem auftritt, tritt es fast immer auf, wenn ein Makro in Excel ausgeführt wird, mit dem Arbeitsblätter kopiert und anschließend in dieselbe Arbeitsmappe wie das ursprüngliche Arbeitsblatt eingefügt werden.
Im Gegensatz zu den schlimmsten technischen Problemen ist die Ursache des Laufzeitfehlers 1004 in Microsoft Excel bekannt. Der Laufzeitfehler 1004 tritt auf, wenn das von Ihnen ausgeführte Makro das ursprüngliche Arbeitsblatt in eine Arbeitsmappe mit einem definierten Namen kopiert, den Sie vor dem Ausführen des Makros nicht gespeichert und geschlossen haben. Ein Beispiel für ein solches Makro ist im folgenden Code zu sehen:
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) Next End Sub
Da die Ursache des Laufzeitfehlers 1004 im Kontext von Microsoft Excel bekannt ist, ist auch die Auflösung bekannt. Neben einer Lösung für dieses Problem steht den betroffenen Benutzern auch eine Problemumgehung zur Verfügung, die verwendet werden kann, falls die Lösung nicht funktioniert oder sie die Lösung nicht als praktikable Option ansehen.
Die Lösung:
Die Lösung für dieses spezielle Problem besteht darin, einfach den Code des von Ihnen ausgeführten Makros zu bearbeiten, damit es die Zielarbeitsmappe regelmäßig speichert und schließt, während Kopien der Arbeitsblätter erstellt werden. Der Code für ein Makro, das dies tut, sieht ungefähr so aus:
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
Hinweis: Die genaue Häufigkeit, mit der Sie ein Arbeitsblatt kopieren können, bevor Sie die Arbeitsmappe speichern und schließen müssen, in der die Kopien gespeichert werden, variiert von Fall zu Fall, da dies von der Größe des Arbeitsblatts abhängt, von dem Sie Kopien erstellen.
Die Problemumgehung:
Wie bereits erwähnt, gibt es auch eine Problemumgehung für dieses spezielle Problem. Um dieses Problem zu umgehen, müssen Sie lediglich ein neues Arbeitsblatt aus einer Vorlage einfügen, anstatt eine Kopie eines vorhandenen Arbeitsblatts zu erstellen. Wenn Sie dieses Problem umgehen möchten, müssen Sie Folgendes tun:
- Starten Sie Excel .
- Erstellen Sie eine neue Arbeitsmappe und löschen Sie jedes einzelne Arbeitsblatt, das die Arbeitsmappe enthält, außer einem.
- Formatieren Sie die Arbeitsmappe.
- Fügen Sie dem einzigen Arbeitsblatt, das die Arbeitsmappe jetzt enthält, standardmäßig Text, Daten und / oder Diagramme hinzu, die Sie standardmäßig in der Vorlage haben möchten.
- Wenn Sie Excel 2003 oder früher verwenden, klicken Sie auf Datei > Speichern unter . Wenn Sie dagegen Excel 2007 oder höher verwenden, klicken Sie auf die Schaltfläche Microsoft Office und dann auf Speichern unter .
- Im Dateiname : Feld, geben Sie in was auch immer Sie die Vorlage werden soll genannt.
- Öffnen Sie das Dropdown-Menü neben dem Feld Dateityp : und klicken Sie auf Excel- Vorlage (.xlt), wenn Sie Excel 2003 oder früher verwenden, oder auf Excel- Vorlage (.xltx), wenn Sie Excel 2007 oder höher verwenden, um es auszuwählen.
- Klicken Sie auf Speichern .
- Nachdem Sie die Vorlage erfolgreich erstellt haben, können Sie sie mithilfe der folgenden Codezeile programmgesteuert einfügen:
Sheets.Add Type: = Pfad \ Dateiname
Hinweis: In der oben beschriebenen Codezeile muss Pfad \ Dateiname durch den vollständigen Pfad (einschließlich des vollständigen Dateinamens) für den Speicherort der soeben erstellten Blattvorlage ersetzt werden.