2012-01-19 8 views
31

Tengo un botón que desencadena una cadena de eventos. Uno de estos eventos es eliminar una hoja. Antes de que elimine cualquier cosa, aparece mi mensaje personalizado SÍ/NO que le pide que confirme todo el proceso.Eliminar hojas y evitar que Excel solicite al usuario que confirme, utilizando mensajes personalizados en su lugar

Luego viene el evento secundario de borrar la hoja y Excel solicita su propio mensaje para confirmar la eliminación de la hoja. El problema es que si dice que no en ese momento, eso configura mi aplicación en un estado incoherente.

¿Cómo puedo de derivación Excel pidiendo que confirme la eliminación de una hoja?

Respuesta

52

Puede cambiar el parámetro de alerta pantalla por defecto de Excel usando:

Application.DisplayAlerts = False 

no se olvide de restaurar el comportamiento estándar al final de su proceso:

Application.DisplayAlerts = True 
+0

Quizás soy solo yo, pero me gusta * restaurar * el valor anterior en lugar de establecerlo en 'True'. Es decir, 'oldvalue = Application.DisplayAlerts',' Application.DisplayAlerts = False', 'sheet.Delete',' Application.DisplayAlerts = oldvalue'. –

+0

@ Andre - Buen toque, defina algo a tener en cuenta al cambiar la configuración de la aplicación, nunca se sabe cómo comenzaron y puede evitar la asignación de la depuración más adelante. –

1

A BORRAR TODAS LAS HOJAS SIN HOJA "INFORMAR" **

Dim NM As String 
Dim CTS As Integer 
Dim CNT2 As Integer 
Dim CNT3 As Integer 
CNT3 = 1 
CNT2 = 1 
CTS = Sheets.Count 
Do Until CNT2 = CTS + 1 
NM = Sheets(CNT3).Name 
If Name = "Report" Then 
Range("A1").Select 
CNT3 = CNT3 + 1 
Else 
Sheets(NM).Select 
Application.DisplayAlerts = False 
ActiveWindow.SelectedSheets.Delete 
Application.DisplayAlerts = True 
End If 
CNT2 = CNT2 + 1 
Loop 
+1

La variable "Nombre" debe ser NM (Si NM = "Informe" Entonces ... – meck373

0

Me encontré con este problema usando Excel 2016, y sorprendentemente DisplayAlerts fue inútil. No estoy seguro si alguien más ha experimentado esto. Todavía estoy seguro de por qué, pero la lectura de este thread, de acuerdo con las observaciones del método Worksheet.Delete (here):

Cuando se elimina una hoja de cálculo, este método muestra un cuadro de diálogo que solicita al usuario para confirmar la eliminación. Este cuadro de diálogo se muestra de manera predeterminada. Cuando se llama al objeto Hoja de cálculo, el método Delete devuelve un valor booleano que es False si el usuario hizo clic en Cancelar en el cuadro de diálogo o en True si el usuario hizo clic en Eliminar.

En Excel 2016, aunque Application.DisplayAlerts se estableció en False, siguió mostrando la alerta después (o mejor dicho, antes) de la eliminación.

no he encontrado un verdadero trabajo en torno todavía, así que simplemente estoy haciendo las hojas que desea eliminar "desaparecer" por medio de un bucle for each:

Sht.UsedRange.clear For each shp in sht.Shapes shp.Delete Next For each nm in sht.Parent.Names if nm.RefersToRange.Parent is sht then nm.Delete Next sht.visible = xlSheetVeryHidden

(código es un proyecto sin marcar ; eventuales errores se pueden tratar con un on error resume next en su mayoría)

No es ideal, pero hace lo que necesito (a cambio de más memoria, claro). Tal vez debería convertir esta respuesta en una pregunta y ver si alguien tiene una mejor idea para Excel 2016.

Cuestiones relacionadas