validacion tipos personalizada mostrar mensaje lista inicia error entrada desplegable datos cumple cuando cuadro crear condiciĆ³n archivo excel vba excel-vba

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