Ejecutar macro según valor Columna CC de fila activa

Hola jc; para variar, tengo otro problema que no consigo solucionar. Te explico:
La columna CC tiene una fórmula. Cuando el resultado de esa fórmula es POR, quiero que se ejecute de manera automática una macro que tengo creada sobre la columna CA. La macro es muy sencilla, solo pega valoresy cambia el formato, es esta:
Sub pegarvalores()
ActiveSheet.Select
Range("CA" & ActiveCell.Row).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "d-m;@"
End Sub
Lo que no consigo hacer es ejecutar la macro de manera automática cada vez que aparece una POR en alguna celda de la Columna CC. Creo que con el evento calculate se puede hacer, pero llevo un par de días con el asunto y no lo saco. ¿Se puede hacer lo que necesito? Gracias por tu ayuda, de nuevo
P.D., te envíe a tu dirección postal lo que hablamos, pero estoy mirando en la página de correos España y me dice que fue admitido en oficina internacional de destino el día 16/12/08 y me dice que para más info, vea la web de la oficina postal local y eso no lo puedo ver... Please, coge este nº de expedición a ver si tu puedes ver algo: CP308125375ES.

1 respuesta

Respuesta
1
Antes que nada desearte una feliz navidad y próspero año nuevo en unión de tu familia y amigos (me refiero a los verdaderos).
En cuanto a tu consulta, no se puede hacer en base al evento Calculate ya que existirán muchos resultados iguales en la columna CC. Tal vez lo que puedes hacer es, por ejemplo, si estas en la celda F2 y en base a esa celda se tiene que producir el valor deseado en CC2, entonces puedes poner un código en el evento Worsheet_Change que sea:
If ActiveCell.Offset(0, 75).Value = 25 Then Call pegarvalores()
Bueno esto es una idea, lo puedes cambiar a tu necesidad.
[email protected]
P.D.: Gracias por el envío, verificaré si puedo consultar en base a ese número.
Disculpa kitor, ¿con qué nombre de remitente lo enviaste?
Hola JC, te envio un email conlos datos de laexpedición. Ahora probare tu solucion de excel y te comento. Gracias.
Hola amigo, necesito más ayuda, la verdad que no tengo ni idea de eventos, es una asignatura pendiente y estoy haciendo un montón de pruebas sin saber realmente que hago.
Te explico, cuando en la celda CC de la fila activa, aparece el valor POR, la selección la tengo siempre en la celda DE y lo único que quiero es que se ejecute mimacro automáticamente sobre la celda CA de la fila activa. El requisito para que se ejecute la macro es que en la celda CC aparezca X
Esto es lo más aproximado que he conseguido, pero no funciona bien:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If ActiveCell.Offset(0, 77).Value = X Then Call pegarvalores
Application.EnableEvents = True
End Sub
LA MACRO DE PEGAR VALORES ES ESTA:
Sub pegarvalores()
Range("CA" & ActiveCell.Row).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "d-m;@"
End Sub
Te agradezco me eches una mano y si me puedas explicar mínimamente mucho mejor, a ver si soy capaz de aprender bien el funcionamiento de este evento porque la verdad que le veo muchas posibilidades que me pueden facilitar el trabajo.
Como siempre, muchas gracias por tu tiempo y más en estas fechas.
Primero veo que tratas de copiar algo pero no veo en dónde. Otra cosa, si deseas evaluar si existe POR en la celda de CC, debes ponerlo de esta forma: If ActiveCell. Offset(0,77). Value = "X" Then Call pegarvalores.
Como ves la por debe ir entre comillas ya que es un Texto. Si con la POR me quieres decir que es un valor cualquiera, entonces debes poner ese valor, o declarar una variable con un valor del resultado de una fórmula para que se ejecute el resto.
[email protected]
Hola amigo, las comillas las tengo puestas y lo que copio lo pego en la misma celda que he copiado. Ya se donde esta el problema, es una tontería pero no se como solucionarlo. Te explico:
El código funciona bien, el problema es que para que me salga la "X" en CC, aplico una macro que me da un resultado en A y finaliza colocándose en celda D. Según sea el resultado de A saldrá o no la POR en CC.
Pues bien, el tema es que si hago que la macro termine en D no se me aplica el evento change pero si hago que la macro termine en A y luego con el ratón selecciono D entonces si se me aplica el evento change.
No se si me he explicado bien, es más sencillo de lo que parece, resumiendo, al colocarme en D mediante macro no se me aplica el evento pero si me coloco en D mediante el ratón justo después de aparecer la "X" en CC se aplica correctamente el evento. ¿Es posible que se aplique el ventó al colocarme en D mediante macro?
Gracias por tu ayuda. Saludos
Hola amigo; no te preocupes ya he conseguido solucionarlo, he tenido que prescindir de que me saliera la "X" de forma automática en CC, ahora la tengo que poner a mano pero me funciona perfectamente. El código me ha quedado así:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 81 And UCase(Target.Value) = "X" Then
Application.Run "'test GENERAL.xlsb'!pegarvalores"
End If
End Sub
Pero cuando creía que estaba solucionado, me he encontrado con otro error inesperado, te cuento: tengo otra macro en la misma hoja, que lo que hace es cortar una fila y insertarla al final de la hoja (ultima fila vacía). Pues bien, al insertar la fila me da el error 13 en tiempo de ejecución y si voy a depurar me aparece la linea del evento change en amarillo
If Target.Column = 81 And UCase(Target.Value) = "X" Then
No entiendo porque sucede esto, ya que no estoy poniendo ningún dato en columna 81, solo corto e inserto. El problema es que me interrumpe la macro. Hay alguna manera de que no me salga este error, o que no lo tenga en cuenta y siga la macro.
Este nuevo contratiempo, me supera, no tengo ni idea de como solucionarlo. Esto del excel es un mundo de sorpresas. ¿Se te ocurre algo? Muchas Gracias.
Perdona el mareo, pero a veces soy muy tonto, tenía la solución delante de los ojos y no me he dado cuenta, es muy tarde y llevo varias horas en el ordenador...
Ya lo tengo solucionado. Te adjunto el código final por si ves conveniente hacer alguna modificación, de lo contrario respóndeme que finalizaré de inmediato esta dichosa pregunta.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 81 And UCase(Target.Value) = "X" Then
Application.Run "'test GENERAL.xlsb'!pegarvalores"
End If
Application.EnableEvents = True
End Sub
Espero no haber sido cansino con tantas aclaraciones. Disculpame. Como ves voy mejorando día a día en esto del excel, pero hubiera sido imposible sin tu ayuda. Gracias.
De eso se trata de mejorar con la experiencia que se adquiere.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas