tipos - validacion de datos en excel personalizada
Borre Hojas y evite que Excel solicite al usuario que confirme, utilizando mensajes personalizados en su lugar (3)
Tengo un botón que desencadena una cadena de eventos. Uno de estos eventos es eliminar una hoja . Antes de que el usuario elimine algo, aparece el mensaje personalizado SÍ / NO que le pide que confirme todo el proceso.
Luego viene el evento secundario de eliminar la hoja, y Excel abre su propia ventana para confirmar la eliminación de la hoja. El problema es que si el usuario dice "no" en ese momento, eso configura mi aplicación en un estado incoherente.
¿Cómo puedo omitir Excel para confirmar la eliminación de una hoja?
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 no estoy seguro de por qué, pero leyendo este thread , de acuerdo con los comentarios del método Hoja de trabajo.Eliminar ( here ):
Cuando elimina una Hoja de trabajo, este método muestra un cuadro de diálogo que solicita al usuario que confirme la eliminación . Este cuadro de diálogo se muestra de forma 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.
Todavía no he encontrado un verdadero trabajo, así que simplemente estoy haciendo que las hojas que quiero eliminar "desaparezcan" usando un for each
ciclo:
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
(el código es un borrador no revisado; los errores eventuales se pueden tratar con un on error resume next
mayoría de las veces)
Está lejos de ser ideal, pero hace lo que necesito hacer (a costa 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.
PARA ELIMINAR TODAS LAS HOJAS CON LA HOJA "REPORT" DE OUT **
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
Puede cambiar el parámetro de alerta de visualización predeterminado de Excel utilizando:
Application.DisplayAlerts = False
no olvide restablecer el comportamiento estándar al final de su proceso:
Application.DisplayAlerts = True