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 = Trueimpide 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.