Saltar al contenido

Cómo detectar si el usuario selecciona cancelar InputBox VBA Excel

Solución:

Si el usuario hace clic en Cancelar, se devuelve una cadena de longitud cero. No puede diferenciar esto de ingresar una cadena vacía. Sin embargo, puede crear su propia clase InputBox personalizada …

EDITAR para diferenciar adecuadamente entre cadena vacía y cancelar, de acuerdo con esta respuesta.

Tu ejemplo

Private Sub test()
    Dim result As String
    result = InputBox("Enter Date MM/DD/YYY", "Date Confirmation", Now)
    If StrPtr(result) = 0 Then
        MsgBox ("User canceled!")
    ElseIf result = vbNullString Then
        MsgBox ("User didn't enter anything!")
    Else
        MsgBox ("User entered " & result)
    End If
End Sub

Le diría al usuario que canceló cuando elimine la cadena predeterminada o haga clic en cancelar.

Ver http://msdn.microsoft.com/en-us/library/6z0ak68w(v=vs.90).aspx

La solución anterior no funciona en todos los casos InputBox-Cancel. Más notablemente, lo hace no trabajar si tienes que InputBox a Distancia.

Por ejemplo, pruebe el siguiente InputBox para definir un rango personalizado (‘sRange’, escriba: = 8, requiere Set + Application.InputBox) y obtendrá un error al presionar Cancelar:

Sub Cancel_Handler_WRONG()
Set sRange = Application.InputBox("Input custom range", _
    "Cancel-press test", Selection.Address, Type:=8)
If StrPtr(sRange) = 0 Then  'I also tried with sRange.address and vbNullString
    MsgBox ("Cancel pressed!")
    Exit Sub
End If
    MsgBox ("Your custom range is " & sRange.Address)
End Sub

Lo único que funciona, en este caso, es una declaración “On Error GoTo ErrorHandler” antes de el InputBox + ErrorHandler al final:

Sub Cancel_Handler_OK()
On Error GoTo ErrorHandler
Set sRange = Application.InputBox("Input custom range", _
    "Cancel-press test", Selection.Address, Type:=8)
MsgBox ("Your custom range is " & sRange.Address)
Exit Sub
ErrorHandler:
    MsgBox ("Cancel pressed")
End Sub

Entonces, la pregunta es cómo detectar cualquiera un error o StrPtr () = 0 con un Si ¿declaración?

El siguiente ejemplo usa el método InputBox para validar la entrada del usuario para mostrar las hojas: Lo importante aquí es usar la variable InputBox dentro de StrPtr para que pueda compararse con ‘0’ cuando el usuario eligió hacer clic en el icono ‘x’ en el InputBox.

Sub unhidesheet()

Dim ws As Worksheet
Dim pw As String

pw = InputBox("Enter Password to Unhide Sheets:", "Unhide Data Sheets")
If StrPtr(pw) = 0 Then

   Exit Sub
ElseIf pw = NullString Then
   Exit Sub
ElseIf pw = 123456 Then
    For Each ws In ThisWorkbook.Worksheets
        ws.Visible = xlSheetVisible
    Next
End If
End Sub
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *