Mensage MsgBox

Veremos si es aquí el lugar indicado
Tengo este código con un mensaje. Si le digo SI, se procesa bien por que llega a activar la linea donde está cmdLimpiarTodo pero, si le digo No, no limpia nada, no pasa del mensaje y quiero que me limpie todo
Private Sub cmdEditar_Click()
    Application.ScreenUpdating = False ' Desde aqui el procedimiento Editar
    ActiveSheet.Unprotect "By Jot@" 'Desprotege la hoja para ingresar datos
'Declara variables
Dim x, y
If ComboDoble.ListIndex < 0 Then
    Exit Sub
Else
    y = ComboDoble.ListIndex + 2
        TextNombre.SetFocus
    'Mensage de advertencia
    If MsgBox(" CUIDADO, va a EDITAR el contacto?" & vbCrLf & vbCrLf & ComboDoble.List(ComboDoble.ListIndex) _
    & vbCrLf & vbCrLf & "No tiene vuelta atrás, Responda, EDITAR ¿SI o NO?", vbInformation + vbYesNo + vbDefaultButton2, "EDITAR CONTACTO") _
    = vbNo Then Exit Sub 'Si presionas NO, hasta aqui llega la macro
'O como tiene el cmdEliminar pero tienes que declarar la variable Dim mensage As String
'Responde Si, reemplasa los valores en la fila correspondiente en la hoja
    Range("a" & y) = TextNombre 'sirviria tambien 'Range("a" + celda) = TextNombre
    Range("b" & y) = TextUbicacion
    Range("c" & y) = TextID
    Range("d" & y) = TextTelefono 'Esta 'Range("d" & y) = Val(Round(TextTelefono, 0)) evita los decimales
    Range("e" & y) = TextIDDos ' pero no admite ceros a la izquierda
    Range("f" & y) = TextTelfDos
    Range("g" & y) = TextIDTres
    Range("h" & y) = TextTelfTres
    Range("i" & y) = TextObservacion
'Ordena la columna NOMBRE (A) alfabeticamente
x = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row '#1
Set myrange = ActiveSheet.Range("A2:I" & x) '#2
myrange.Sort Key1:=ActiveSheet.Range("A1") '#3
    ComboDoble.clear 'Limpia el ComboBox para actualisarlo
'Actualisa la lista en el ComboBox al editar contactos
    For x = 2 To ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row '#4
        ComboDoble.AddItem ActiveSheet.Range("A" & x) '#5
    Next x
    cmdLimpiarTodo_Click 'Limpia todos los TextBox y Combobox
End If
    ActiveSheet.Protect "By Jot@" 'Protege nuevamente la hoja para no ingresar datos
    Application.ScreenUpdating = True
End Sub
Cuando digo cmdLimpiaTodo es un botón cmdLimpiaTodo donde tengo para limpiar todos los textBox, ListBox y ComboBox, todo queda sin texto alguno.
¿Qué puedo hacer para que este código al decirle No me limpie todo? Tal como lo hace diciéndole SI
{"lat":10.2686197205666,"lng":-67.5780844688416}

1 respuesta

Respuesta
1
A ver si le he entendido bien.
¿Usted desea tanto como si le da a si como si le da Cancelar que limpie las celdas? Si fuera ese el caso, en vez de hacer un "vbYesNo" podría reemplazarlo por un "vbOKOnly".
Si no es ese el caso, descríbame mejor el punto, porque no le acabo de entender bien.
En determinado punto del código, está esta linea
cmdLimpiarTodo_Click 'Limpia todos los TextBox y Combobox
cmdLimpiarTodo_Click, es un botón que tengo para limpiar todos objectos del formulario pero lo uso también como rutina para que al presionar el botón Editar luego pregunta y si le digo SI, el código llega hasta final pasando por cmdLimpiarTodo_Click PERO si le digo NO no me limpia nada.
Pretendo que si le digo SI, siga el código y limpie todos objectos del formulario, usando el comando cmdLimpiarTodo_Click.
Si ledigo NO que no haga nada pero que limpie todos objectos del formulario, usando el comando cmdLimpiarTodo_Click.
Cuanto al "vbYesNo" es precisamente para que si le digo NO actúe = vbNo Then Exit Sub para que salga si le digo NO y use el comando cmdLimpiarTodo_Click.
Tengo otro de los botones patra Eliminar (cmdEliminar) que si funciona tantosi le digo Si como si le digo NO pero ya intente colocar ese msgbox en Editar y no me funciona
Ahora si te he entendio, puedes controlar el msgbox del si y del no, también utilizando el else del if.
donde está la línea esta:
  If MsgBox(" CUIDADO, va a EDITAR el contacto?" & vbCrLf & vbCrLf & ComboDoble.List(ComboDoble.ListIndex) _
    & vbCrLf & vbCrLf & "No tiene vuelta atrás, Responda, EDITAR ¿SI o NO?", vbInformation + vbYesNo + vbDefaultButton2, "EDITAR CONTACTO") _
    =
vbNo Then Exit Sub 'Si presionas NO, hasta aqui llega la macro
Tienes que cambiar el vbNo por el VbYes y no le hagas salir de la función, así:
If MsgBox(" CUIDADO, va a EDITAR el contacto?" & vbCrLf & vbCrLf & ComboDoble.List(ComboDoble.ListIndex) _
    & vbCrLf & vbCrLf & "No tiene vuelta atrás, Responda, EDITAR ¿SI o NO?", vbInformation + vbYesNo + vbDefaultButton2, "EDITAR CONTACTO") _
    = vbYes Then  'Si presionas NO, hasta aquí llega la macro

Te va a ejecutar todo el código cuando le des a Yes y ahora antes de terminar la función vamos a controlar que si le ha dado a no, en vez de salir del programa que ejecute la función cmdLimpiarTodo_Click.
Ahora, para controlar que no se pulsado el vbYes, en la zona siguiente:
  For x = 2 To ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row '#4
        ComboDoble.AddItem ActiveSheet.Range("A" & x) '#5
    Next x
    cmdLimpiarTodo_Click 'Limpia todos los TextBox y Combobox
End If

Justo antes de terminar el End If vamos a poner un else, que va a ejecutar la función cuando no se puse el vbYes. Quedando el mismo trozo como pongo a continuación:
For x = 2 To ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row '#4
        ComboDoble.AddItem ActiveSheet.Range("A" & x) '#5
 Next x
    cmdLimpiarTodo_Click 'Limpia todos los TextBox y Combobox
Else
 cmdLimpiarTodo_Click
End If

Pues listo, esto ya tendría que funcionar y haces lo que querías.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas