Hoe Run Time Error 1004 in Excel te repareren

Runtime-fout 1004 is een foutcode van Microsoft Visual Basic waarvan bekend is dat deze Microsoft Excel-gebruikers beïnvloedt. Het is bekend dat de fout het meest voorkomt in Excel 2003 en Excel 2007, hoewel geen enkele versie van Microsofts populaire werkbladtoepassing voor computers veilig is voor de dreiging Runtime-fout 1004. In de meeste gevallen zien gebruikers met dit probleem een ​​van twee verschillende variaties van Run-time error 1004. In hun geheel luidden de twee variaties van Run-time error 1004:

' Runtime-fout' 1004 ':

Kopieermethode van werkbladklasse is mislukt '

' Runtime-fout' 1004 ':

Door de applicatie gedefinieerde of door het object gedefinieerde fout ”

Het exacte foutbericht dat u ziet, kan in enkele gevallen ook enigszins variëren, hoewel de foutcode hetzelfde blijft. Ongeacht welke versie van het probleem u ondervindt, het komt echter bijna altijd voor wanneer u een macro uitvoert in Excel die is ontworpen om werkbladen te kopiëren en vervolgens de kopieën in dezelfde werkmap te plaatsen als het originele werkblad.

In tegenstelling tot de ergste technische problemen die er zijn, is de oorzaak van runtime-fout 1004 binnen Microsoft Excel bekend. Runtime-fout 1004 treedt op wanneer de macro die u gebruikt, het originele werkblad kopieert naar een werkmap met een gedefinieerde naam die u niet hebt opgeslagen en gesloten voordat u de macro uitvoerde. Een voorbeeld van een dergelijke macro is te zien in de volgende 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) Next End Sub 

Omdat de oorzaak van runtime-fout 1004 in de context van Microsoft Excel bekend is, evenals de resolutie. Naast een oplossing voor dit probleem, is ook een oplossing beschikbaar die kan worden gebruikt in het geval dat de oplossing niet werkt of de oplossing niet als een haalbare optie beschouwt.

De oplossing:

De oplossing voor dit specifieke probleem is om eenvoudig de code van de macro die u gebruikt te bewerken om deze periodiek op te slaan en de doelwerkmap te sluiten terwijl er kopieën van de werkbladen worden gemaakt. De code voor een macro die dit doet, zou er ongeveer als volgt uitzien:

 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 

Opmerking: het exacte aantal keren dat u een werkblad kunt kopiëren voordat u de werkmap moet opslaan en sluiten waarin de kopieën worden opgeslagen, verschilt van geval tot geval, afhankelijk van de grootte van het werkblad waarvan u kopieën maakt.

De oplossing:

Zoals eerder vermeld, bestaat er ook een oplossing voor dit specifieke probleem. U kunt dit probleem omzeilen door eenvoudig een nieuw werkblad uit een sjabloon in te voegen in plaats van een kopie van een bestaand werkblad te maken. Als u dit probleem wilt omzeilen, moet u het volgende doen:

  1. Start Excel .
  2. Maak een nieuwe werkmap en verwijder elk werkblad dat de werkmap bevat, behalve één.

  3. Formatteer de werkmap.
  4. Voeg alle tekst, gegevens en / of grafieken die u standaard in de sjabloon wilt hebben, toe aan het enige werkblad dat de werkmap nu bevat.
  5. Als u Excel 2003 of eerder gebruikt, klikt u op Bestand > Opslaan als . Als u Excel 2007 of hoger gebruikt, klikt u daarentegen op de Microsoft Office- knop en vervolgens op Opslaan als .

  6. Typ in het veld Bestandsnaam : hoe u de sjabloon wilt noemen.
  7. Open het vervolgkeuzemenu naast het veld Opslaan als type: en klik op Excel- sjabloon (.xlt) als u Excel 2003 of eerder gebruikt, of Excel- sjabloon (.xltx) als u Excel 2007 of hoger gebruikt om het te selecteren.

  8. Klik op Opslaan .

  9. Nadat u de sjabloon hebt gemaakt, kunt u deze programmatisch invoegen met behulp van de volgende coderegel:

    Spreadsheets Type toevoegen: = pad \ bestandsnaam

Opmerking: in de hierboven beschreven coderegel moet pad \ bestandsnaam worden vervangen door het volledige pad (inclusief de volledige bestandsnaam) voor de locatie van de sjabloon die u zojuist hebt gemaakt.

Interessante Artikelen