DOMINA-BACH Básico study materials
DOMINA-BACH Básico study resources

DOMINA-BACH Básico: Interacción con el usuario y eventos básicos

DOMINA-BACH Básico · Work through your exam, one topic at a time.

All guide sections

Interacción con el usuario y eventos básicos

El dominio Interacción con el usuario y eventos básicos comprueba si sabes pedir datos, interpretar la respuesta y colocar código que reaccione a lo que ocurre en el libro.

Cuadros de diálogo

MsgBox(prompt, botones, título) devuelve una constante: vbYes, vbNo, vbCancel, vbOK o vbRetry. Los botones se combinan, por ejemplo vbYesNo + vbQuestion + vbDefaultButton2. InputBox(prompt, título, valor predeterminado) devuelve siempre String; al pulsar Cancelar devuelve cadena vacía, indistinguible de un texto vacío salvo que se compruebe StrPtr(resultado) = 0. Application.InputBox con Type:=1 devuelve un número, o False si se cancela.

Eventos

El código de evento va en el módulo del objeto, nunca en un módulo estándar, y la firma la genera el editor:

  • Worksheet_Change(ByVal Target As Range): al modificar una celda.
  • Worksheet_SelectionChange(ByVal Target As Range): al cambiar la selección.
  • Workbook_Open(): al abrirse el libro.
  • Workbook_BeforeClose(Cancel As Boolean): Cancel = True impide cerrar.

Ejemplo razonado

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Me.Columns(1)) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Target.Offset(0, 1).Value = Now
    Application.EnableEvents = True
End Sub

Intersect limita la acción a la columna A; sin esa comprobación cualquier cambio dispararía el código. Escribir en la hoja desde dentro de Change vuelve a disparar el evento, por eso se desactiva EnableEvents y se reactiva al final.

Errores que cuestan puntos

Olvidar restaurar EnableEvents; comparar el retorno de MsgBox con el texto «Sí» en vez de con vbYes; esperar un número de InputBox sin convertirlo; y ubicar el evento en un módulo estándar, donde nunca se ejecuta.