Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ELIMINAR TODAS LAS HOJAS EXCEPTO "HOJA1" CON MACRO

73 views
Skip to first unread message

MarianoB

unread,
Aug 25, 2006, 5:51:30 AM8/25/06
to
Buenos días grupo,

Estoy intentando crear una macro que borre todas las hojas de un libro
excepto "Hoja1" con el siguiente código pero a parece un error:
'---
'ELIMINAR TODAS LAS HOJAS EXCEPTO HOJA1
Sub ELIMINA_HOJAS()
Dim ws As Worksheet
Dim A, B, C, D As String
If ActiveWorkbook.Sheets.Count > 1 Then
For Each ws In Worksheets
If ws.Name <> "Hoja1" Then
A = A & """" & ws.Name & """" & ", "
End If
Next ws
B = Len(A)
C = Mid(A, 2, B - 4)
Sheets(Array(C)).Select
ActiveWindow.SelectedSheets.Delete
End If
End Sub
'---
La variable C contiene toda la cadena que debería ponerse en el array
pero aparece el error: '424' en tiempo de ejecucción: Se requiere un
objeto."
¿El problema es que en vez del nombre de la variable debería estar la
cadena?, y si es así ¿Cómo se hace? ó ¿he planteado mal la macro?

Muchas gracias a todos.
---------------------------

Juan M

unread,
Aug 25, 2006, 6:20:42 AM8/25/06
to
Hola MarianoB

No entiendo porque complicas tanto el proceso.
De esta forma es suficiente:
Solo elimina las hojas de calculo, las de graficos no se eliminan.
Si queres el grafico cambia worksheets por sheets.

sub elimina()
dim ws as worksheet
'application.displayalerts=false
For Each ws In activeworkbook.sheets
If ws.Name <> "Hoja1" Then
ws.delete
End If
Next ws
'application.displayalerts=true
end sub

Los dos puntos comentados es para que no tengas que confirmar cada
eliminacion.

Respecto al error que te aparece es porque hay cosas incorrectas en el
codigo.

Cuando haces:
dim A,B,C,D as stirng
solo has declarado D como string, las demas son variant.

El valor de A es una cadena de texto donde estan los nombres separados por
comas.
B es el valor de la longitud de A, no de cada nombre.
C no va a hacer loque creo que intentas, extraer el nombre, ya que b es un
valor fijo, no una matriz (array).

Y cuando marcas sheets(array(C)), creo que intentas mandar el valor del
array (que no tienes) definido, pero estas enviando algo como una posicion
marcada con uan cadena de texto??

Para que todo esto te funcione creo que deberias definir A como array

dim A() as string

dentro del bucle (i seria un contador)
A(i)=ws.name

para eliminarlas deberias volver a realizar otro bucle para eliminar las
hojas

espero haberte aclarado algo, si no te he solucionado nada y quieres
comentarlo...

un saludo
juan

"MarianoB" <mariano...@conway.es> escribió en el mensaje
news:1156499490.5...@75g2000cwc.googlegroups.com...

MarianoB

unread,
Aug 25, 2006, 7:42:19 AM8/25/06
to
Hola JuanM
1.- Después de leer tu código te doy toda la razón: Me he complicado
a lo tonto.
2.- Con respecto a:
> Cuando haces:
> dim A,B,C,D as string

> solo has declarado D como string, las demas son variant.

Estaba convencido que todas eran String no solo la última.(Muchas
gracias).

3.- Había grabado una macro para ver el código que generaba cuando
eliminaba varias hojas y el resultado era un array de los nombres de
hojas entre comillas separados por comas: ("xx", "yyyyy", "zzz") por lo
que yo intentaba imitar eso con una macro donde A después del bucle
contenía (""xx", "yyyyy", "zzz", "), B me da la longitud de A y C es
un extracto de la cadena A desde el caracter 2 hasta el total de la
longitud de A (es decir, B) menos 4 caracteres. Todo eso sí funcionaba
pero es verdad que la definicion de variables estaba mal hecha y que
efectivamente donde pone [array(C)] debería poner (suponiendo que mi
macro estuviese bien) [array("xx", "yyyyy", "zzz")].

4.- Con respecto a:


> espero haberte aclarado algo, si no te he solucionado nada y quieres

> comentarlo... :
¡¡¡JODER!!!!!, PUES QUE ME HAS DADO LA SOLUCCIÓN, ME HAS ACLARADO
FALLOS QUE DESCONOCÍA Y QUE

5.- seguramente me deje cosas en el tintero pero que no puedo terminar
sin decir....MUCHAS GRACIAS!!!!!

Alexander Chacin

unread,
Aug 25, 2006, 1:26:48 PM8/25/06
to
No estoy muy seguro sobre lo que quieres, pero si estás creando un libro
nuevo y quieres que tenga una sola hoja puedes probar esto

Sub Crear_Libro()
Dim HojasEnLibro as Integer

HojasEnLibro = Application.SheetsInNewWorkbook

Application.SheetsInNewWorkbook = 1
Workbooks.Add

Application.SheetsInNewWorkbook = HojasEnLibro

End Sub

Saludos
Alex

"MarianoB" <mariano...@conway.es> escribió en el mensaje
news:1156499490.5...@75g2000cwc.googlegroups.com...

MarianoB

unread,
Aug 28, 2006, 4:28:42 AM8/28/06
to
Hola Alexander,

> Estoy intentando crear una macro que borre todas las hojas de un libro

> excepto "Hoja1".
Quería eliminar todas las hojas (excepto "Hoja1") de un libro
previamente creado. En Hoja1 tenía creadoas algunos botones asociados
a macros y uno de ellos debía eliminar todas las hojas excepto HOJA1.
No obstante muchas gracias por tu aportación.

SALU2.
MarianoB.

KL

unread,
Aug 28, 2006, 5:22:08 AM8/28/06
to
Una opcion mas:

Sub test()
Worksheets("Sheet1").Copy
ActiveWorkbook.SaveAs "Prueba.xls"
End Sub

--
Saludos,
KL


"MarianoB" <mariano...@conway.es> wrote in message news:1156753722.3...@i3g2000cwc.googlegroups.com...

MarianoB

unread,
Aug 28, 2006, 5:26:46 AM8/28/06
to
...es otra forma de enfocarlo....

;-)

Gracias KL.


KL wrote:
> Una opcion mas:
>
> Sub test()
> Worksheets("Sheet1").Copy
> ActiveWorkbook.SaveAs "Prueba.xls"
> End Sub
>
> --
> Saludos,
> KL
>

> > ---------------------------

0 new messages