Msgbox en excel con macro

Tengo una hoja de excel con una macro en la que cambia valores a una celda. Ejemplo:( celda c1 le coloco un valor x, la cual en la celda e1 cambia) lo que requiero es que cuando cambie yo el valor de la celda c1 me aparezca un msgbox preguntando si se requiere cambiar la celda c1 ya que le insertare este macro al que ya esta para que funcione al 100 la hoja.

1 Respuesta

Respuesta
2

Solo aclara si es correcto tu comentario o se refiere a no cambiar la celda en E1.

Que cuando cambie yo el valor de la celda c1 me aparezca un msgbox preguntando si se requiere cambiar la celda c1

Y también deja el inicio de tu macro donde estés evaluando que el Change se hace en el rango C.

Ok le agrego el macro que tengo para que antes de que se ejecute este, me enseñe el msgbox y tenga la opción de ejecutar o abortar.

Private sub worksheet_selectionchange(byval target as range)

if target.count > 1 then exit sub

if not intersec(target, range(“c12,c13”)) is nothing then

if [k12]=7000 then

[k12]=14000

end if

end if

Espero sus comentarios saludos y suerte

No está aclarado pero tomaré tus dichos del inicio: '....es que cuando cambie yo el valor de la celda c1 me aparezca un msgbox preguntando si se requiere cambiar la celda c1.'

Te dejo las 2 macros que necesitas.

1- La del evento Selection_Change se ejecuta al seleccionar una celda... no al cambiarla. Entonces en este evento vamos a guardar el valor que tenga en ese momento la celda de col C. Así cuando decidas NO cambiarla se volverá a su valor. Solo ajusta el rango de control.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C1:C100")) Is Nothing Then
    'guardar el valor de celda activa por si se opta por NO modificarla
    dato = Target.Value
End If
End Sub

2- La del evento Change se ejecutará cuando cambias un valor en C, también ajusta el rango de control.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C1:C100")) Is Nothing Then
    'consulta
    sino = MsgBox("¿Deseas modificar la celda activa?", vbQuestion + vbYesNo, "CONFIRMAR")
    'por NO, se devuelve a la celda el valor que tenía y se cancela
    If sino <> vbYes Then
        Application.EnableEvents = False   '(*)
        Target.Value = dato
        Application.EnableEvents = True
        Exit Sub
    End If
    'por SI, se modificará celda en col E
    Range("E" & Target.Row) = Target.Value
End If
End Sub
'(*) Se pasa a False para que no se vuelva a ejecutar el Change cuando se reemplaza el valor por el anterior.
'Luego se lo vuelve a True.

Y como instrucción inicial, en este módulo, coloca la declaración de la variable para que sea utilizada en los 2 eventos:

Dim dato As String   'ajusta el tipo de datos

Por lo que te quedará algo así. Colocalas en la hoja que corresponda, en mi caso fue Hoja3.

PD) Como el código que enviaste no se condice con la consulta es posible que tengas que modificar el proceso en cuánto a qué hacer cuando se cambia C... en tu ejemplo modificabas E.

Sdos y no olvides valorar las respuestas.

Elsa

* Más ejemplos del uso de MsgBox podrás encontrarlo en el manual de Formularios

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas