VBA EXCEL - ERROR: Copiar hoja

Resuelto
nnaoy33 Mensajes publicados 1 Estado Miembro -  
 Franck -
Hola,
Hola a todos,
Aquí tengo un pequeño problema con una de mis macros en un libro de trabajo:

El primer libro está compuesto por una tabla de la cual me gustaría distribuir cada fila en las hojas de un segundo libro. (Este libro está compuesto por tantas hojas como filas tiene mi tabla)

Así es como funciona la macro:
He creado en el segundo libro una hoja modelo oculta:
Por cada fila, la macro copia mi hoja, la completa y pasa a la siguiente fila. He creado un bucle...

Desafortunadamente, este bucle solo funciona 56 veces, mientras que mi tabla incluye 250 filas (como máximo).
Entonces aparece este error:

Error de ejecución 1004
El método Copy de la clase Worksheet ha fallado.

en esta línea:
Libro.Sheets("Modelo").Copy after:=Libro.Sheets("Inicio") 'Inicio es una hoja de bienvenida en el segundo libro

¡Esta línea está, sin embargo, en el bucle!
- Sin embargo, no he superado el número máximo de hojas permitidas en un libro. Además, puedo añadir pestañas manualmente.
- La hoja modelo solo "pesa" 200 Ko

¡AYUDA!
Muchas gracias de antemano

Yoann

PD: Espero haber sido claro. Puedo proporcionar más información si es necesario, pero creo que lo esencial del problema está ahí.
Configuración: Windows XP Internet Explorer 6.0

9 respuestas

calborno
 
Aquí está lo que encontré en el sitio de Microsoft:

Causa:
Este problema ocurre porque cada vez que copias la misma hoja, se le asigna un nombre de código a la copia, y con cada copia de la hoja, este nombre de código se alarga. Por ejemplo, si copias sheet1 una vez, el nombre de código asignado a la hoja es sheet11. Cuando copias nuevamente esta hoja, se le asigna el nombre sheet111, y así sucesivamente. La longitud máxima del nombre de código es de aproximadamente 35 caracteres. Cuando se alcanza este límite, Excel deja de responder.

Solución propuesta:
Para sortear este problema, intenta usar un código similar al siguiente para copiar hojas de cálculo:
***
Sub Copy Sheets()

For x = 1 To 300
Sheets.Add
Workbooks("YourWorkBook.xls").Sheets("sheet1").Cells.Copy
ActiveSheet.Paste
Workbooks("YourWorkBook.xls").Sheets("sheet1").Select
Next x

End Sub
***

Esto es todo...
3
commentcamarcheeay Mensajes publicados 735 Estado Miembro 86
 
Esta solución es interesante. Funciona bien.
Ahora voy a buscar cómo vaciar el portapapeles al final del procedimiento (macro).
0
commentcamarcheeay Mensajes publicados 735 Estado Miembro 86
 
Para dominar mejor la hoja añadida, es mejor instanciarla. Te sugiero que agregues la siguiente modificación:
dim xlSheet as Sheet
set xlSheet = Sheets.Add
0
Usuario anónimo
 
Hola,

Sugerencia:

Ejemplo tipo probado en Office 2003 (WXP).

 Opción Explícita Sub Test() Dim Libro As Workbook Dim Bucle As Long Application.ScreenUpdating = False Set Libro = ActiveWorkbook Bucle = 1 Libro.Sheets("Modelo").Copy after:=Libro.Sheets("Inicio") ActiveSheet.Name = "Copia" & Bucle For Bucle = 2 To 250 Libro.Sheets("Modelo").Copy after:=Libro.Sheets(Libro.Sheets.Count) ActiveSheet.Name = "Copia" & Bucle Next Bucle Application.ScreenUpdating = True End Sub ' 


Lupin
1
cousinhub29 Mensajes publicados 1112 Fecha de registro   Estado Miembro Última intervención   383
 
Hola,

No sé bajo VB, pero en VBA hay una solución muy simple para evitar este tipo de "bug"....

El principio:
Creas un archivo que contenga solo una única hoja, y esa hoja servirá de modelo (puedes nombrar este archivo "modelo.xls"). Esta hoja tiene, por supuesto, la misma estructura que tu hoja 1.

Y luego, en lugar de copiar la hoja 1 a seguir, insertas una nueva hoja, del mismo tipo que el archivo "modelo.xls" con esta línea de código:

Sheets.Add Type:=ActiveWorkbook.Path & "\modelo.xls", _ After:=Sheets(Sheets.Count)


Así puedes agregar tantas hojas idénticas como quieras....

Esta línea de código reemplaza tu línea:

 xlSheet.Copy after:=xlBook.Worksheets(.Worksheets.Count) 


Que tengas un buen día.
1
Franck
 
¡Gracias counsinhub, has encontrado LA solución. ¡Eres genial!
0
gbinforme Mensajes publicados 14930 Fecha de registro   Estado Colaborador Última intervención   4 743
 
hola

- Sin embargo, no he superado el número máximo de hojas permitidas en un libro.

El número máximo de hojas en un libro depende de la memoria disponible...

Además, puedo agregar pestañas manualmente.

Sin duda, tu procedimiento VBA ocupa memoria que luego se libera.

- La hoja modelo solo "pesa" 200Ko

Es el tamaño en disco, pero en memoria no necesariamente es lo mismo.

Deberías ver si puedes optimizar tu procedimiento para no crear reservas de áreas innecesarias o no liberadas.

Si todo está óptimo, tendrás que ir a ver al comerciante de módulos...

--

siempre zen
0
nnaoy33
 
Hola
Primero que nada, gracias por responderme.

He "aligerado" mi carpeta que contiene la macro. He eliminado mis userforms y otras macros innecesarias para el funcionamiento de esta, de modo que solo queda lo esencial.
Desafortunadamente, no se crea ninguna hoja más.
Tal vez tenga una solución, pero me gustaría conocer tu opinión primero: volver a iniciar otro bucle a partir de la línea 55 de mi tabla, un bucle que tendría la misma apariencia.
¿Es inútil? Voy a intentarlo, te mantengo informado. Soy principiante en programación, así que me llevará un tiempo...

Yoann
0
nnaoy33
 
¡Aquí estoy de nuevo!
He intentado recrear el mismo bucle para las líneas restantes.
Tuve que reabrir un segundo libro bis. Sin embargo, solo puede crear 18 hojas en este nuevo libro.
He eliminado:
Application.ScreenUpdating
para liberar memoria.

Pero aún así: el segundo libro se bloquea en 56 hojas y el segundo bis en 18.

GRRRR.....
¿Alguna idea?
Gracias de antemano.
Yoann
0
dan_ange
 
Hola, tengo un resultado extraño al intentar copiar una hoja con VBA en Excel 2000. En mi puesto, las cosas transcurren como se espera: inserción de una copia de una hoja justo después de esta y renombrado.
Pero en otros puestos, la macro comienza y... se vuela a saber dónde sin que haya copia.
Aparentemente, la selección de la hoja se lleva a cabo bien, pero la solicitud de copia provoca una salida del procedimiento. Durante algunos segundos, el acceso a la copia de la hoja (a través del botón derecho "copiar y mover") no está disponible en esta hoja.

Mi puesto está equipado con acceso. Los otros no.
En "herramientas" del editor de Visual Basic, se indica en los módulos marcados: "falta CPSEtendedControls 1.0 type library".

Todas las demás funciones programadas funcionan bien (aparición de calendario, ocultar o mostrar filas mediante un botón, etc).
0
dan_ange
 
Añadiré que después de eso intenté grabar básicamente una simple macro de copia de hoja (en las estaciones donde no funciona).
La grabación se realiza correctamente, pero la macro actúa de la misma manera que mi programa tan pronto como encuentra el término "copy".
0
commentcamarcheeay Mensajes publicados 735 Estado Miembro 86
 
Hola a todos,

Utilizo VB6 para comunicarme con Excel 2000. Tengo el mismo problema que ustedes. Cada vez que llego a la instrucción .Copy se desencadena una excepción. No estoy intentando copiar una hoja varias veces. Me pasa incluso con una sola vez. Es, de hecho, irregular. Con el mismo código, a veces funciona y otras veces se bloquea.

Aquí está mi código:
 ... Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlBook = frmTrain.xlBook With xlBook Set xlSheet = .Worksheets(1) xlSheet.Copy after:=xlBook.Worksheets(.Worksheets.Count) Set xlSheet = xlBook.Worksheets(.Worksheets.Count) With xlSheet .Name = "Train" & .Parent.Worksheets.Count Dim i As Integer ' Escribir el Nombre del tren .Cells(2, 3) = tempVar(0) ' Vaciar las celdas .Range(.Cells(4, 2), .Cells(4, 3).End(xlDown)).value = 0 ' Lista de posiciones For i = LBound(tempVar(1)) To UBound(tempVar(1)) .Cells(4 + i, 2) = tempVar(1)(i)(0) .Cells(4 + i, 3) = tempVar(2)(i)(0) Next i End With End With Set xlBook = Nothing ... 


La solución de calborno parece interesante. La probaré y les informaré.
La de Lupin.A se parece a la mía. No funciona para mí.

¡Buena suerte!

--
C. Taha
0
commentcamarcheeay Mensajes publicados 735 Estado Miembro 86
 
De hecho, la solución de calborno funciona muy bien. Por mi parte, diré que el problema está resuelto.
¡Basta saber cómo vaciar el portapapeles al final del procedimiento (macro)!
¡Gracias a todos ustedes!
0