No se ejecuta la macro

Hola alguien me podría ayudar a resolver un problema con una MACRO
¿Cuándo cambio el valor de la celda A1 se debe colorear de cierto color la celda B1 (esa es la función de la macro), ambas celdas tienen fórmulas matriciales y con origen de datos provenientes de la hoja2 el problema es que la única forma de que se ejecute la macro es ingresando a la edición de funciones de la celda A1 y realizando la siguiente operación (F2, Ctr+Shift+Intro) entiendo que esto es para convertir la fórmula a matricial pero desde un inicio ya la había capturado como matricial porque de otra forma no me realizaría los cálculos de los valores, habrá alguna forma de que corra la macro sin necesidad de hacer esta operación? Ya que tengo muchas de estas fórmulas de este tipo en la hoja y que necesitan interactuar con esta macro.
De antemano agradezco su tiempo y ayuda al experto que me pueda apoyar.
Respuesta
1
Las macros que evalúan contenido en celdas solo se ejecutan cuando ingresas un valor en ellas.
La única manera de evaluar el contenido de tu celda A1 es colocando una instrucción en el evento Calculate de la hoja, pero entenderás que esto podría volver bastante lento tu proceso si son muchos los cálculos que se efectúan en la hoja.
De todos modos te dejo para que lo pruebes:
Private Sub Worksheet_Calculate()
If Range("A1").Value = 100 Then    'evalúa el contenido de la celda
Call tu_macro
End If
Buenos días Experta, muchas gracias por contestar mi pregunta ya que este asunto me había dado muchos dolores de cabeza y con esto avanzo muchísimo, pero tengo dos pequeñas preguntas aun que acontinucacion describo.
¿La macro la tengo directamente en el código de la hoja como (Sub Worksheet_Change(ByVal Target As Range) como correspondería que colocase el modulo que me describió en su respuesta? ¿Y si no fuera unicamente la celda A1 la que deseara calcular sino un rango de E6 a BA205?
Nuevamente muchas gracias experta poratender mi pregunta y ceder parte de su tiempo.
La macro que evalúa el cálculo, se coloca en la misma hoja tal como parece que tenés ahora la del Change.
No podrás utilizar la misma porque seguramente hace referencia a TARGET, entonces eso debe ser modificado por ACTIVECELL o establecer el rango de la celda ... y colocarla dentro de este evento (calculate) o en un módulo.
Será mejor que me escribas tu rutina para que te pase todas las instrucciones ajustadas porque veo que no es mucho lo que dominas del tema
Hola experta, le envío la rutina completa para una mejor valoración.
Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
Select Case Target.Value
Case 1
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 2
Case 2
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 37
Case 3
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 34
Case 4
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 35
Case 5
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 18
Case 6
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 2
Case 7
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 36
Case 8
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 34
Case 9
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 45
Case 10
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 18
Case Else
Range("F" & LTrim(Str(Target.Row))).Interior.ColorIndex = 2
End Select
End If
End Sub
Nuevamente muchas gracias por ayudarme.
Lo que hace la rutina que me adjuntas, es controlar lo que ingresas en col 5, es decir en E y según eso colorear la celda aledaña, o sea F.
Por lo que mencionaste al inicio de la consulta, la col E tiene fórmulas y el evento Calculate no trabaja con el target (o sea la celda activa) sino con el total de celdas que se actualizan con el cálculo, por lo que tendrá que recorrer toda la col E e ir evaluando su contenido para colorear la celda vecina aunque esté resolviendo cálculos en otras col.
Viendo que tenés hasta el rango BA205 no creo que esto sea muy recomendable. Pero aquí va para que pruebes. Se coloca en el objeto HOJA1

Private Sub Worksheet_Calculate()
For n = 6 To 205
'recorre la col E controlando su valor y coloreando la col F
Select Case Range("E" & n).Value
Case 1
Range("F" & n).Interior.ColorIndex = 2
Case 2
Range("F" & n).Interior.ColorIndex = 37
Case 3
Range("F" & n).Interior.ColorIndex = 34
Case 4
Range("F" & n).Interior.ColorIndex = 35
Case 5
Range("F" & n).Interior.ColorIndex = 18
Case 6
Range("F" & n).Interior.ColorIndex = 2
Case 7
Range("F" & n).Interior.ColorIndex = 36
Case 8
Range("F" & n).Interior.ColorIndex = 34
Case 9
Range("F" & n).Interior.ColorIndex = 45
Case 10
Range("F" & n).Interior.ColorIndex = 18
Case Else
Range("F" & n).Interior.ColorIndex = 2
End Select
Next n
End Sub
Saludos y comentame cómo te resultó.
Experta, mil millones de gracias, en verdad me funciono todo a la perfección y una ves que termine unos detalles mi proyecto le enviaré una copia para valorarlo y me de su punto de vista.
Nuevamente muchas gracias y saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas