Macro para activar celda desde una columna

Buenas me pueden ayudar por favor con una macro que se active al escribir cualquier cosa en la columna QUE y que permita que ese campo se modifique, es decir que permita que se guarde lo que se escribió siempre y cuando las celdas que estén a la izquierda no estén vacías. Es decir que si yo escribo algo en Q6 o en Q54 me permita escribirlo siempre y cuando A6, B6, etc no estén vacías.. O siguiendo el ejemplo A54, B54, etc.
Se que tiene algo que ver con los eventos de las hojas pero no encuentro
Gracias

1 Respuesta

Respuesta
1
primero en la columna R debes poner =CONTAR.BLANCO(A1:P1)
Esto contara las celdas en blanco entre el rango a1 y p1 (fila)
Luego podrías intentar esto
Private Sub Worksheet_Change(ByVal Target As Range)
If Mid(Target.Address, 2, 1) <> "Q" Then Exit Sub
On Error Resume Next
If Range("R" & (Selection.Row - 1)).Value > 0 Then Range("Q" & (Selection.Row - 1)).Value = 0
End Sub
Es decir, valida si cuando cambias una celda en QUE ( ejemplo Q1) y en R1 el total de celdas en blanco es >0 entonces el valor de la celda que estas editando sera Cero, claro que tu puedes poner otro valor o un mensaje, etc.
Bueno, es lo único que se me ocurre.
A ver si te sirve
Gracias por tu respuesta, resulta que la macro la copie en la hoja, no en un modulo.. Lo extraño es que no se como correrla o si con solo eso al escribir algo en columna QUE ya debería funcionar.. porque me deja escribir aunque las celdas estén vacías.
¿Lo otro que te iba a preguntar es que en la fórmula que puse en columna R afecta que sea texto lo que hay?
No la fórmula en R lo único que hace es contar celdas vacías, por ende si no están vacías no las cuenta, no importando que tipo de dato alojen.
El macro lo tienes que correr de la siguiente forma:
Debes ir al editor de visual basic que tiene Excel y en el costado izquierdo del editor encontraras la lista de tus hojas, desde allí, debes dar doble click sobre la hoja que quieres que tenga esta macro, una vez seleccionado, debes pegar el macro . una vez que lo pegues, estando ya sobre la hoja de Excel ve metiendo datos y ya esta, al momento de realizar un cambio sobre la hoja se activa el macro.
Uy si esta perfecta! Solo decime como la detengo... por favor le puse el siguiente mensaje.. pero se queda el msgbox en OK y no se quita.
Private Sub Worksheet_Change(ByVal Target As Range)
If Mid(Target.Address, 2, 1) <> "Q" Then Exit Sub
On Error Resume Next
If Range("R" & (Selection.Row - 1)).Value > 0 Then Range("Q" & (Selection.Row - 1)).Value = 0
MsgBox ("Alguna celda esta vacia, por favor verificar")
End Sub
Te agradezco tu ayuda
Le estuve dando algunas vueltas y creo que mejor prueba de esta forma
If Mid(Target.Address, 1, 6) = "$Q:$Q" Then Exit Sub
If Mid(Target.Address, 2, 1) <> "Q" Then Exit Sub
On Error Resume Next
i = (i + 1)
If Range("R" & (Selection.Row - 1)).Value > 0 Then
 If i = 2 Then i = 0: Exit Sub
    Range("Q" & (Selection.Row - 1)).Clear
MsgBox ("Alguna celda esta vacia, por favor verificar")
Else
i = 0
End If
la variable i declarala en el ambito "general" del editor de Vbasic
le agrege una linea If Mid(Target.Address, 1, 6) = "$Q:$Q" Then Exit Sub   esto te sacara del evento change, cuando selecciones la columan completa ( por ejemplo si querias eliminar todos los datos, o hacer un cambio general, asi como estaba te daba error, sorry).
Ahora lo probé y lo re-re-re-reprobé y no me dio problemas y quedo con tu mensaje y todo.
Bye
Perfecto! gracias por tu ayuda.. ¿quedaría así? Es que la puse así la guarde en la hoja1 y aun así no me esta haciendo nada... te agradezco millones
Private Sub Worksheet_Change(ByVal Target As Range)
If Mid(Target.Address, 1, 6) = "$Q:$Q" Then Exit Sub
If Mid(Target.Address, 2, 1) <> "Q" Then Exit Sub
On Error Resume Next
i = (i + 1)
If Range("R" & (Selection.Row - 1)).Value > 0 Then
 If i = 2 Then i = 0: Exit Sub
    Range("Q" & (Selection.Row - 1)).Clear
MsgBox ("Alguna campo esta vacio, por favor verificar")
Else
i = 0
End If
End Sub
Si esta bien. Pero recuerda que debes declarar la variable i en la parte "general" del editor de Visual basic.
Cuando vas al editor de Visual basic, l aventana de edición tiene un 2 cuadros de lista desplegables, en el extremo superior izquierdo debe decir General y el izquierdo debe decir "Declaraciones"
Bien en ese espacio pones:
Option Explicit
Dim i As Integer
Ahora si el código lo pones en la hoja1, entonces esto servirá cada vez que edites en la hoja1 y solo allí.
Pruébalo otra vez y si sigues con problemas indicame un mail a donde te pueda enviar la planilla de ejemplo que realize.
Bye
Por favor envíamelo a nvhpeamarrobagmailpuntocom
La puse así.. y no me hace nada
Esto en general-declarations
Option Explicit
Dim i As Integer
y esto en worksheet -change
Private Sub Worksheet_Change(ByVal Target As Range)
If Mid(Target.Address, 1, 6) = "$Q:$Q" Then Exit Sub
If Mid(Target.Address, 2, 1) <> "Q" Then Exit Sub
On Error Resume Next
i = (i + 1)
If Range("R" & (Selection.Row - 1)).Value > 0 Then
 If i = 2 Then i = 0: Exit Sub
    Range("Q" & (Selection.Row - 1)).Clear
MsgBox ("Alguna campo esta vacio, por favor verificar")
Else
i = 0
End If
End Sub
Ok, enviado
Me comentas que tal

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas