# Cómo eliminar hojas en excel?



## cgcamal (May 2, 2007)

Hola,

¿Quisiera saber cómo puedo decir en una macro que quiero borrar todas las páginas existentes menos las que yo desee y que lo haga automático sin necesidad de dar click en "Aceptar" cuando aparezca el mensaje "Se van a perder los datos de la hoja. desea borrar"?


Muchas gracias,


----------



## galileogali (May 2, 2007)

Proba esto:

```
Sub SheetsDeletear()

Application.DisplayAlerts = False
    Sheets(Array("Hoja2", "Hoja3")).Select
    ActiveWindow.SelectedSheets.Delete

Application.DisplayAlerts = True

End Sub
```


----------



## Greg Truby (May 2, 2007)

¿Gali, por qué las selecciona?  No es necesario.
	
	
	
	
	
	



```
Sub foo()
    Application.DisplayAlerts = False
    ThisWorkbook.Sheets(Array("Sheet2", "Sheet3")).Delete
    '// poner la propiedad a TRUE otra vez no es necesario
    '// si su código termina pronto porque al terminar la
    '// rutina se vuelve a CIERTO automaticamente.
    '// Pero si falta más actividades, mejor ponerla como
    '// CIERTO otra vez.
    Application.DisplayAlerts = True
End Sub
```


----------



## galileogali (May 2, 2007)

Greg: francamente no me habia percatado del innecesario paso por select, en gran parte por haber usado la grabadora para facilitarme la tarea de codificar.

Lo que me ha resultado interesante es la aclaración sobre la VUELTA A TRUE  de Display Alerts, con ScreenUpdating pasa lo mismo?
Con Enableevents?

Cual sería la medida O CRITERIO SI ES QUE PUEDE DEFINIRSE de ese "PRONTO"??, al que te referís, cuando decis si SU CODIGO TERMINA PRONTO"


----------



## cgcamal (May 3, 2007)

Muchas gracias Galileo y Greg, a ambos. Resolví esa parte de mi macro.
Pondré luego más consultas.

Gracias.


----------



## Greg Truby (May 3, 2007)

> ¿...con ScreenUpdating pasa lo mismo? ¿Con Enableevents?
> ...
> ¿Cual sería la medida O CRITERIO SI ES QUE PUEDE DEFINIRSE de ese "PRONTO"?, al que te referís, cuando decis si SU CODIGO TERMINA PRONTO"
> ~galileogali



Con SU sí, con EE no.  Corre _Main_, y después corre _Marino_ o _Consciente_ para ver --> 
	
	
	
	
	
	



```
Sub main()
    acuático
    marino
    With Application
        MsgBox "DA..." & vbTab & .DisplayAlerts & vbCr _
             & "SU..." & vbTab & .ScreenUpdating & vbCr _
             & "EE..." & vbTab & .EnableEvents, vbInformation, "main"
    End With
    consciente
End Sub

Sub acuático()
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
        .EnableEvents = False
        MsgBox "DA..." & vbTab & .DisplayAlerts & vbCr _
             & "SU..." & vbTab & .ScreenUpdating & vbCr _
             & "EE..." & vbTab & .EnableEvents, vbInformation, "acuático"
    End With
End Sub

Sub marino()
    With Application
        MsgBox "DA..." & vbTab & .DisplayAlerts & vbCr _
             & "SU..." & vbTab & .ScreenUpdating & vbCr _
             & "EE..." & vbTab & .EnableEvents, vbInformation, "marino"
    End With
End Sub

Sub consciente()
    With Application
        MsgBox "DA..." & vbTab & .DisplayAlerts & vbCr _
             & "SU..." & vbTab & .ScreenUpdating & vbCr _
             & "EE..." & vbTab & .EnableEvents, vbInformation, "consciente"
    End With
End Sub
```

Y con este ejemplo se ve que quiere decir "pronto".  O sea que no faltan más rutinas en una cadena.  Que la rutina no sea una que podría ser llamado como parte de una cadena.  Por lo general cuando uno apaga DA y ScrnUpdt, uno las deja apagados para toda la rutina y reestablece los valores antes del END SUB. Por lo general apago y enciendo estas propiedades dentro de la misma rutina, o sea, si la(s) apago en _acuático_ allí mismo la(s) encendería, si la(s) apago en _Main_ entonces la(s) enciendo al cerrar _Main_ aunque no es necesario.


----------



## galileogali (May 4, 2007)

Gracias Greg:
Clara tu explicacion y muy ingeniosos tus ejemplos.

Muy util: principalmente para evitar innecesarias sentencias antes de los Exit sub que puedan estar apareciendo en el codigo.


----------

