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.
---------------------------
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...
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!!!!!
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...
> 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.
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...
;-)
Gracias KL.
KL wrote:
> Una opcion mas:
>
> Sub test()
> Worksheets("Sheet1").Copy
> ActiveWorkbook.SaveAs "Prueba.xls"
> End Sub
>
> --
> Saludos,
> KL
>
> > ---------------------------