Error de ejecución 1004: Error en el método PasteSpecial de la clase Range

  • Compartir Este
Hugh West

Uno de los problemas más comunes que nos encontramos al trabajar con copiar y pegar en VBA es el error de ejecución 1004 : Fallo en el método PasteSpecial de la clase Range En este artículo, te mostraré cuáles son las posibles razones de este error y cómo solucionarlas, con ejemplos e ilustraciones adecuadas.

Descargar el cuaderno de prácticas

Descárgate este cuaderno de prácticas para ejercitarte mientras lees este artículo.

Falló el método PegarEspecial.xlsm

Falló el Método PasteSpecial de la Clase Range: Causas y Soluciones

Sin más dilación, pasemos a nuestro debate principal, es decir, cuáles pueden ser las posibles razones de este error y cómo solucionarlas.

Razón 1: Acceder al método PasteSpecial sin copiar nada

Esta es la razón más común detrás del error. Es decir, tratando de acceder a la PegarEspecial sin copiar nada.

Para entenderlo con claridad, compruebe lo siguiente VBA código.

⧭ Código VBA:

 Sub PasteSpecial_Method_of_Range_Class_Failed() Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub 

En este caso, hemos utilizado el PegarEspecial método de VBA sin copiar nada. Así, Excel mostrará un error de ejecución 1004 cuando lo ejecutes.

⧭ Solución:

Para resolver este problema, primero hay que copiar un rango de celdas y luego acceder a la función PegarEspecial método.

 Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End Sub 

Cuando ejecutes este código, pegará las fórmulas del rango B3:B5 de la hoja de cálculo activa al rango seleccionado.

Más información: PegarMétodo Especial de la Clase de Hoja de Trabajo Falló (Razones & Soluciones)

Razón 2: Acceso al método PasteSpecial con error ortográfico

Esta es otra razón común detrás del error. Es decir, para acceder al PegarEspecial con error(es) ortográfico(s) en cualquier argumento.

Fíjese en lo siguiente VBA Aquí hemos cometido un error ortográfico en el argumento xlPegarTodo .

⧭ Código VBA:

 Sub PasteSpecial_Method_of_Range_Class_Failed() Application.Range("B3:B5").Copy Selection.PasteSpecial Paste:=xlPaseAll End Sub 

Cuando ejecute este código, obtendrá el mensaje error de ejecución 1004 .

⧭ Solución:

La solución es fácil. Seguro que ya lo has adivinado. Sólo tienes que asegurarte de que la ortografía de todos los argumentos es correcta.

Y el error desaparecerá automáticamente.

Más información: Cómo usar el comando especial Pegar en Excel (5 formas adecuadas)

Lecturas similares

  • Excel VBA: Copiar Rango a Otro Libro
  • Copiar y Pegar Valores en la Siguiente Fila Vacía con Excel VBA (3 Ejemplos)
  • Aplicar VBA PasteSpecial y Mantener el Formato de Origen en Excel
  • Cómo Copiar el Mismo Valor en Varias Celdas en Excel (4 Métodos)
  • Excel VBA para copiar filas a otra hoja de cálculo basado en criterios

Razón 3: Abrir un nuevo libro de trabajo después de copiar que cancela el modo copiar/pegar

Es decir, hacer algo que cancele el modo copiar/pegar antes de pegar.

Mira el siguiente código para entenderlo claramente.

⧭ Código 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:=xlPasteAllFin Sub 

Aquí hemos copiado el rango B3:B5 del Hoja1 de un libro de trabajo llamado Cuaderno de ejercicios1 .

Luego hemos creado un nuevo libro de trabajo llamado Cuaderno2 en la misma carpeta e intenté pegar el rango copiado en el rango B3:B5 de Hoja1 de ese libro de trabajo.

Pero cuando ejecutemos el código, se mostrará un Fallo en el método PasteSpecial de la clase Range Error, porque en el momento en que creamos el nuevo libro de trabajo, el modo copiar/pegar se cancelará.

⧭ Solución:

Para resolver este problema, en primer lugar, escriba las líneas de código para crear el nuevo libro de trabajo llamado Cuaderno2 .

A continuación, inserte las líneas para activar Cuaderno de ejercicios1 y copie de él el rango deseado.

Y por último, activa Cuaderno2 y pegue allí el rango copiado.

 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 

Ejecuta este código. Copiará el rango B3:B5 de Hoja1 de Cuaderno de ejercicios1.

Y pégalo en Hoja1 del libro de trabajo recién creado llamado Cuaderno2 .

⧭ Precaución:

Obviamente, no olvide guardar Cuaderno de ejercicios1 abierto mientras se ejecuta el código.

Más información: Cómo Desactivar Copiar y Pegar en Excel sin Macros (Con 2 Criterios)

Razón 4: Al cambiar Application.CutCopyMode a False se cancela el modo copiar/pegar.

Por último, puede haber otra razón para que se produzca el error. Podemos apagar el Application.CutCopyMode por error antes de acceder al PegarEspecial método.

Aunque no es una práctica muy habitual, a veces la llevamos a cabo cuando tenemos que trabajar con un gran número de líneas.

Vea el siguiente código para entenderlo claramente. Aquí hemos copiado el rango B3:B5 pero canceló el CutCopyMode antes de pegarlo.

⧭ Código VBA:

 Sub PasteSpecial_Method_of_Range_Class_Failed() Rango("B3:B5").Copy Application.CutCopyMode = False Rango("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub 

Cuando ejecute el código, aparecerá el icono Fallo en el método PasteSpecial de la clase Range error.

⧭ Solución:

Supongo que a estas alturas todos habréis adivinado la solución. La verdad es que es bastante sencilla. Basta con eliminar la línea del código que convierte el CutCopy modo desactivado.

Por lo tanto, lo correcto VBA código será:

 Sub PasteSpecial_Method_of_Range_Class_Failed() Rango("B3:B5").Copy Rango("D3:D5").PasteSpecial Paste:=xlPasteAll End Sub 

Copiará el rango B3:B5 y pégalo sobre el D3:D5 sin ningún problema.

Más información: VBA Pegado Especial para Copiar Valores y Formatos en Excel (9 Ejemplos)

Cosas para recordar

Aquí he mostrado sólo los problemas que puedes encontrar al trabajar con el PegarEspecial método en VBA. Si desea conocer la PegarEspecial en detalle, visite este enlace .

Conclusión

Así que, en resumen, estas son las razones que pueden causar la error de ejecución 1004: PasteSpecial Method od Range Class Failed en tu código. Espero que hayas entendido todos los puntos con claridad y que te ayuden mucho en el futuro. ¿Conoces alguna otra razón? ¿Y tienes algún problema? No dudes en preguntarnos. Y no olvides visitar nuestra web ExcelWIKI para más posts y actualizaciones.

Hugh West es un capacitador y analista de Excel altamente experimentado con más de 10 años de experiencia en la industria. Tiene una Licenciatura en Contabilidad y Finanzas y una Maestría en Administración de Empresas. Hugh tiene una pasión por la enseñanza y ha desarrollado un enfoque de enseñanza único que es fácil de seguir y comprender. Su conocimiento experto de Excel ha ayudado a miles de estudiantes y profesionales en todo el mundo a mejorar sus habilidades y sobresalir en sus carreras. A través de su blog, Hugh comparte su conocimiento con el mundo, ofreciendo tutoriales gratuitos de Excel y capacitación en línea para ayudar a las personas y empresas a alcanzar su máximo potencial.