Sommario
Uno dei problemi più comuni che incontriamo quando lavoriamo con copiare e incollare in VBA è il errore di esecuzione 1004 : Metodo PasteSpecial della classe Range fallito In questo articolo vi mostrerò quali sono le possibili ragioni di questo errore e come risolverle, con esempi e illustrazioni appropriate.
Scarica il quaderno di esercizi
Scaricate questo quaderno di esercizi per esercitarvi durante la lettura di questo articolo.
Metodo PasteSpecial non riuscito.xlsmMetodo PasteSpecial della classe Range fallito: cause e soluzioni
Senza indugiare oltre, passiamo alla discussione principale, ovvero quali possono essere le possibili ragioni di questo errore e come risolverle.
Motivo 1: Accesso al metodo PasteSpecial senza copiare nulla
Questo è il motivo più comune dell'errore, cioè il tentativo di accedere al file IncollaSpeciale senza copiare nulla.
Per comprenderlo chiaramente, verificare quanto segue VBA codice.
⧭ Codice VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub
In questo caso, abbiamo utilizzato l'opzione IncollaSpeciale metodo di VBA senza copiare nulla. Quindi Excel visualizzerà un errore di run-time 1004 quando lo si esegue.
⧭ Soluzione:
Per risolvere questo problema, è necessario innanzitutto copiare un intervallo di celle e poi accedere all'opzione IncollaSpeciale metodo.
Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub
Quando si esegue questo codice, vengono incollate le formule dell'intervallo B3:B5 del foglio di lavoro attivo all'intervallo selezionato.
Per saperne di più: Metodo PasteSpecial della classe Worksheet non riuscito (motivi e soluzioni)
Motivo 2: Accesso al metodo PasteSpecial con errore ortografico
Questa è un'altra ragione comune dietro l'errore, ovvero l'accesso al file IncollaSpeciale con errori ortografici in qualsiasi argomento.
Si veda quanto segue VBA In questo caso abbiamo commesso un errore di ortografia nell'argomentazione xlIncollaTutto .
⧭ Codice VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlPaseAll End Sub
Quando si esegue questo codice, si otterrà il messaggio errore di run-time 1004 .
⧭ Soluzione:
La soluzione è facile, sono sicuro che l'avete già intuita. Assicuratevi solo che l'ortografia di tutti gli argomenti sia stata fatta correttamente.
L'errore scomparirà automaticamente.
Per saperne di più: Come usare il comando Incolla speciale in Excel (5 modi adatti)
Letture simili
- Excel VBA: copiare un intervallo in un'altra cartella di lavoro
- Copia e incolla i valori nella riga vuota successiva con Excel VBA (3 esempi)
- Applicare VBA PasteSpecial e mantenere la formattazione di origine in Excel
- Come copiare lo stesso valore in più celle in Excel (4 metodi)
- Excel VBA per copiare righe in un altro foglio di lavoro in base a criteri
Motivo 3: L'apertura di una nuova cartella di lavoro dopo la copia annulla la modalità Copia/Incolla
Questo è un altro importante motivo alla base dell'errore: fare qualcosa che annulli la modalità copia/incolla prima di incollare.
Guardate il codice seguente per capire meglio.
⧭ Codice VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Workbooks("Workbook1.xlsx").Worksheets("Sheet1").Range("B3:B5").Select Selection.Copy Dim Workbook2 As Workbook Set Workbook2 = Workbooks.Add Workbook2.SaveAs Filename:=ThisWorkbook.Path & "\" &; "Workbook2.xlsx" Workbook2.Activate Workbook2.Unprotect Workbook2.Worksheets("Sheet1").Range("B3:B5").Select Selection.PasteSpecial Paste:=xlPasteAllFine Sub
Qui abbiamo copiato l'intervallo B3:B5 dal Foglio1 di una cartella di lavoro chiamata Libro di lavoro1 .
Poi abbiamo creato una nuova cartella di lavoro chiamata Libro di lavoro2 nella stessa cartella e ho provato a incollare l'intervallo copiato nell'intervallo B3:B5 di Foglio1 di quella cartella di lavoro.
Ma quando si esegue il codice, viene visualizzato un messaggio Metodo PasteSpecial della classe Range fallito Errore, perché nel momento in cui creiamo la nuova cartella di lavoro, il file modalità copia/incolla sarà annullato.
⧭ Soluzione:
Per risolvere questo problema, per prima cosa, scrivete le righe di codice per creare la nuova cartella di lavoro chiamata Libro di lavoro2 .
Inserite quindi le righe per attivare Libro di lavoro1 e copiare l'intervallo desiderato.
E infine, attivare Libro di lavoro2 e incollarvi l'intervallo copiato.
Sub PasteSpecial_Method_of_Range_Class_Failed() Dim Workbook2 As Workbook Set Workbook2 = Workbooks.Add Workbook2.SaveAs Filename:=ThisWorkbook.Path & "\" & "Workbook2.xlsx" Workbooks("Workbook1.xlsx").Activate Worksheets("Sheet1").Range("B3:B5").Select Selection.Copy Workbook2.Activate Worksheets("Sheet1").Range("B3:B5").Select Selection.PasteSpecial Paste:=xlPasteAll End Sub
Eseguire questo codice, che copierà l'intervallo B3:B5 da Foglio1 di Libro di lavoro1.
E incollarlo in Foglio1 della cartella di lavoro appena creata, chiamata Libro di lavoro2 .
⧭ Precauzione:
Ovviamente, non dimenticate di tenere Libro di lavoro1 aperto durante l'esecuzione del codice.
Per saperne di più: Come disabilitare il copia e incolla in Excel senza macro (con 2 criteri)
Motivo 4: L'impostazione di Application.CutCopyMode su False annulla la modalità copia/incolla.
Infine, potrebbe esserci un'altra ragione per cui si verifica l'errore: si potrebbe spegnere il Applicazione.CutCopyMode erroneamente prima di accedere al IncollaSpeciale metodo.
Anche se non è una pratica molto comune, a volte lo facciamo quando dobbiamo lavorare con un numero elevato di righe.
Per capirlo meglio, si veda il codice seguente. Qui abbiamo copiato l'intervallo B3:B5 , ma ha annullato il Modalità di taglio-copia prima di incollarlo.
⧭ Codice VBA:
Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Application.CutCopyMode = False Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub
Quando si esegue il codice, viene visualizzato il messaggio Metodo PasteSpecial della classe Range fallito errore.
⧭ Soluzione:
Immagino che ormai tutti abbiate intuito la soluzione. In realtà è molto semplice: basta rimuovere la riga del codice che trasforma il parametro TagliareCopiare modalità off.
Quindi, la corretta VBA codice sarà:
Sub PasteSpecial_Method_of_Range_Class_Failed() Range("B3:B5").Copy Range("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub
Copia l'intervallo B3:B5 e incollarlo sopra il file D3:D5 senza problemi.
Per saperne di più: VBA Paste Special per copiare valori e formati in Excel (9 esempi)
Cose da ricordare
Qui sono mostrati solo i problemi che si possono incontrare quando si lavora con il programma IncollaSpeciale metodo in VBA. Se volete conoscere il IncollaSpeciale metodo in dettaglio, visitare il sito questo link .
Conclusione
In breve, questi sono i motivi che possono provocare il errore di run-time 1004: metodo PasteSpecial della classe Range fallito Spero che abbiate capito tutti i punti in modo chiaro e che questi vi siano di grande aiuto in futuro. Conoscete altri motivi e avete qualche problema? Non esitate a chiedercelo. E non dimenticate di visitare il nostro sito ExcelWIKI per ulteriori post e aggiornamenti.