Como configurar el botón cancelar del inputBox

He creado una macro para cerrar el libro.

Al cerrar el libro mediante un inputBox me pregunta si quiero añadir alguna nota.

Funciona todo bien salvo el botón cancelar del inputBox que al pulsarlo me devuelve falso y quería que al pulsarlo no haga nada solo cierre el libro.

He insertado imagen y código.

Saludos.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Dim vNota As String
Dim uf As Integer
uf = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
    Do While vNota = ""
        vNota = Application.InputBox("Añadir notas", "Macro")
        If StrPtr(vNota) = vbEmpty Then
            Exit Sub
            Else
                If vNota = "" Then
                    MsgBox ("***IMPORTANTE***, añade nota o pulse cancelar."), vbCritical, "Mensaje"
                Else
                    Hoja1.Range("A1") = "Versión: " & Now
                    Hoja1.Cells(uf, 1) = vNota
                End If
        End If
    Loop
End Sub

1 respuesta

Respuesta
2

En la instrucción del InputBox debieras consultar como 'False'. Esto será tanto por si presiona el botón Cancelar como el de cerrar el InputBox.

        If vNota = False Then
'o, como en tu modelo:
        If StrPtr(vNota) = False Then

Hola y gracias Elsa por su comentario. Disculpa que haya tardado en responder pero hasta hoy no he visto el aviso.

He probado así y no va.

El código quedó así:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Dim vVersión As String
Dim uf As Integer
uf = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
    Do While vVersión = ""
        vVersión = Application.InputBox("Añadir puntos desarrollados", "Macro")
        If StrPtr(vVersión) = False Then '<---------
'        If StrPtr(vVersión) = vbEmpty Then
            Exit Sub
            Else
                If vVersión = "" Then
                    MsgBox ("***IMPORTANTE***, añade punto trabajado o pulse cancelar."), vbCritical, "Mensaje"
                Else
                    Hoja1.Range("A1") = "Versión: " & Now
                    Hoja1.Cells(uf, 1) = vVersión
                End If
        End If
    Loop
End Sub

Estoy viendo que no comenté la línea cuándo inserte el código.

Probé la macro con la línea comentada. Te digo esto porque me dirías que esa línea sobra.

Saludos

La variable debe ser declarada como variant, o de este modo:

Dim vVersión

También se puede verificar qué valores toma al momento de presionar en la X del cuadro o en el botón Cancelar, agregando un punto de interrupción. Al detenerse la macro allí, pasa el mouse por la variable para observar su contenido.

Y ese contenido tendrás que colocar en la instrucción. En mi caso, el resultado es 'Falso' lo que en VBA lo programo como False.

Te invito a mirar el video N° 71 de mi canal:

Allí el 2do Tip trata sobre la utilidad que prestan los Puntos de Interrupción.

Sdos.

Elsa

Hola Elsa gracias nuevamente por responder.

Sí entiendo el añadir los puntos de interrupción.

He grabado un breve video donde le expongo mejor el motivo de la consulta, espero hacerme entender mejor y disculpe si la estoy liando.

Enlace video:https://drive.google.com/file/d/1tFoRCUZa-rGqWbNt48aKbWCu4Ly4kbCe/view?usp=sharing 

Un cordial saludo.

Qué pena la demora, pero el sitio ya no envía avisos de vuestras aclaraciones.

Intenta ajustando la línea que te marco hacia el final:

                    If vVersión <> False Then Hoja1.Cells(uf, 1) = vVersión
                End If
        End If
    Loop
End Sub

Sdos!

¡Gracias! Elsa por su atención.

Al final ha creo haberlo conseguido con su ayuda.

Le estoy muy agradecido:

Dejo el código conforme lo tengo adaptado a mi hoja:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Dim vVersión As Variant
Dim uf As Integer
uf = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
    Do While vVersión = ""
        vVersión = Application.InputBox("Añadir puntos desarrollados", "Macro")
        If StrPtr(vVersión) = False Then
            Exit Sub
            Else
                If vVersión = "" Then
                    MsgBox ("***IMPORTANTE***, añade punto trabajado o pulse cancelar."), vbCritical, "Mensaje"
                Else
                    If vVersión <> False Then ActiveSheet.Cells(uf, 1) = vVersión: ActiveSheet.Range("A1") = "Versión: " & Now  'Elsa
                End If
        End If
    Loop
End Sub

Un cordial saludo y muchísimas gracias por todo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas