Un error de tiempo de ejecución de Microsoft Visual Basic 1004 es un código de error que se sabe que afecta a los usuarios de Microsoft Excel. Se sabe que Excel 2003 y Excel 2007 son los errores más frecuentes, aunque ninguna versión de la popular aplicación de hoja de cálculo de Microsoft en las computadoras está a salvo de la amenaza del Runtime Error 1004. En la mayoría de los casos, los usuarios ven afectados por este problema uno de dos variaciones del error de tiempo de ejecución 1004. En su totalidad, lea las dos variaciones del error de tiempo de ejecución 1004:
«Error de tiempo de ejecución ‘1004’:
La copia de la clase de hoja de trabajo falló«
«Error de tiempo de ejecución ‘1004’:
Error definido por aplicación o definido por objeto«
El mensaje de error exacto que ve puede variar ligeramente, en algunos casos, aunque el código de error seguirá siendo el mismo. Sin embargo, no importa con qué versión de la edición esté familiarizado, casi siempre sucede cuando ejecuta una macro en Excel que está diseñada para copiar hojas de trabajo y luego colocar las copias en el mismo libro que la hoja de trabajo original.
A diferencia de los peores problemas tecnológicos que existen, la causa del error Runtime 1004 se conoce en Microsoft Excel. Se produce un error de tiempo de ejecución 1004 cuando la macro que está ejecutando copia la hoja de trabajo original en un libro de trabajo con un nombre definido que no guardó y cerró antes de ejecutar la macro. Un ejemplo de una macro de este tipo se puede ver en el siguiente código:
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
Dado que se conoce la causa del error Runtime 1004 en el contexto de Microsoft Excel, al igual que el secreto. Además de resolver este problema, lo que también está disponible para los usuarios afectados es un flujo de trabajo que se puede utilizar en caso de que la solución no funcione o no encuentre la solución como una opción viable.
La solución:
La solución a este problema específico es editar el código de macro que está ejecutando para que guarde y cierre periódicamente el libro de trabajo mientras hace copias de la (s) hoja (s) de trabajo. El código de una macro que hace esto se vería así:
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: La cantidad de veces que puede copiar una hoja de trabajo antes de tener que guardar y cerrar el libro de trabajo que está guardando las copias varía de un caso a otro, ya que depende del tamaño de la hoja de trabajo que tenga.
La solución alternativa:
Como ya se mencionó, también existe una solución de trabajo para este problema específico. Enviar una nueva hoja de trabajo a partir de una plantilla en lugar de crear una copia de la hoja de trabajo existente es un asunto sencillo. Si desea solucionar este problema, esto es lo que debe hacer:
- Habla a Sobresalir.
- Cree un nuevo libro de trabajo y eliminado todas las hojas de trabajo menos una están en el libro de trabajo.
- Formato el libro de trabajo.
- Agregue cualquier texto, datos y / o gráficos que desee en la plantilla de forma predeterminada a la única hoja de trabajo en el libro de trabajo ahora.
- Si está utilizando Excel 2003 o una versión anterior, haga clic en Archivo > Guardar como. Si está utilizando Excel 2007 o posterior, por otro lado, haga clic en el Microsoft Office y luego haga clic en Guardar como.
- Sa Nombre del archivo: campo, escriba el nombre que desee para la plantilla.
- Abra el menú desplegable junto al Guardar como tipo: campo y haga clic en Sobresalir Plantilla (.xlt) si está utilizando Excel 2003 o una versión anterior, o Sobresalir Plantilla (.xltx) si está utilizando Excel 2007 o posterior para seleccionarlo.
- Haga clic en Salvar.
- Una vez que haya creado correctamente la plantilla, puede enviarla de forma programable utilizando la siguiente línea de código:
Hojas.Añadir tipo: =senderonombre del archivo
Nota: En la línea de código descrita anteriormente, ruta nombre de archivo es necesario reemplazar la ubicación de la plantilla de página que ha creado con la ruta completa (incluido el nombre completo del archivo).