Come correggere l'errore di runtime 1004 in Excel

L'errore di run-time 1004 è un codice di errore relativo a Microsoft Visual Basic noto per influire sugli utenti di Microsoft Excel. È noto che l'errore è prevalente su Excel 2003 ed Excel 2007, sebbene nessuna versione della popolare applicazione di foglio di lavoro Microsoft per computer sia al sicuro dalla minaccia che è l'errore di runtime 1004. Nella maggior parte dei casi, gli utenti interessati da questo problema vedono uno dei due diverse varianti dell'errore run-time 1004. Nella loro interezza, le due varianti dell'errore run-time 1004 recitano:

" Errore di runtime" 1004 ":

Metodo di copia della classe del foglio di lavoro non riuscito "

" Errore di runtime" 1004 ":

Errore definito dall'applicazione o definito dall'oggetto "

Anche il messaggio di errore esatto che vedi potrebbe variare leggermente, in alcuni casi, anche se il codice di errore rimarrà lo stesso. Indipendentemente dalla versione del problema riscontrato, tuttavia, si verifica quasi sempre durante l'esecuzione di una macro in Excel progettata per copiare fogli di lavoro e quindi posizionare le copie nella stessa cartella di lavoro del foglio di lavoro originale.

A differenza dei peggiori problemi tecnologici, è nota la causa dell'errore di run-time 1004 in Microsoft Excel. L'errore di run-time 1004 si verifica quando la macro in esecuzione sta copiando il foglio di lavoro originale in una cartella di lavoro con un nome definito che non è stato salvato e chiuso prima di eseguire la macro. Un esempio di tale macro può essere visto nel seguente codice:

 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 

Poiché la causa dell'errore di run-time 1004 nel contesto di Microsoft Excel è nota, così come la risoluzione. Oltre a una soluzione a questo problema, ciò che è disponibile anche per gli utenti interessati è una soluzione alternativa che può essere utilizzata nel caso in cui la soluzione non funzioni o non trovi che la soluzione sia un'opzione praticabile.

La soluzione:

La soluzione a questo problema specifico è semplicemente modificare il codice della macro in esecuzione per salvarlo periodicamente e chiudere la cartella di lavoro di destinazione mentre esegue copie del foglio o dei fogli di lavoro. Il codice per una macro che fa ciò apparirebbe come segue:

 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 

Nota: il numero esatto di volte in cui è possibile copiare un foglio di lavoro prima di dover salvare e chiudere la cartella di lavoro in cui vengono salvate le copie varia da un caso all'altro poiché dipende dalle dimensioni del foglio di lavoro di cui si stanno eseguendo le copie.

La soluzione alternativa:

Come affermato in precedenza, esiste anche una soluzione alternativa a questo problema specifico. Per ovviare a questo problema è semplice inserire un nuovo foglio di lavoro da un modello invece di creare una copia di un foglio di lavoro esistente. Se desideri aggirare questo problema, ecco cosa devi fare:

  1. Avvia Excel .
  2. Crea una nuova cartella di lavoro ed elimina ogni singolo foglio di lavoro contenuto nella cartella di lavoro, salvo uno.

  3. Formatta la cartella di lavoro.
  4. Aggiungi testo, dati e / o grafici che desideri includere nel modello per impostazione predefinita nell'unico foglio di lavoro che ora contiene la cartella di lavoro.
  5. Se si utilizza Excel 2003 o precedente, fare clic su File > Salva con nome . Se si utilizza Excel 2007 o versioni successive, fare invece clic sul pulsante Microsoft Office e quindi fare clic su Salva con nome .

  6. Nel campo Nome file : digita quello che vuoi che venga chiamato il modello.
  7. Aprire il menu a discesa accanto al campo Salva come tipo: e fare clic su Modello Excel (.xlt) se si utilizza Excel 2003 o precedente, oppure Modello Excel (.xltx) se si utilizza Excel 2007 o successivo per selezionarlo.

  8. Clicca su Salva .

  9. Dopo aver creato correttamente il modello, è possibile inserirlo a livello di codice utilizzando la seguente riga di codice:

    Aggiungi fogli: = percorso \ nomefile

Nota: nella riga di codice sopra descritta, il percorso \ nomefile deve essere sostituito con il percorso completo (incluso il nome file completo) per la posizione del modello di foglio appena creato.

Articoli Interessanti