Rango de celdas combinadas para activar una macro

Tengo la siguiente macro:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F5:F11")) Is Nothing Then
On Error Resume Next
macro = Target.Value
Run macro
End If

End Sub

Pero necesito combinar las celdas F5:H5. F6:H6, F7:H7 ... F11:H11

Si combino estas celdas la macro no funciona. ¿Qué debo cambiar en la macro para que funcione con estas celdas combinadas?

3 respuestas

Respuesta
4

H   ol a:

Si tienes combinadas las celdas F5, G5 y H5, cuando seleccionas la "F5", no estás seleccionando únicamente la celda F5, también estás seleccionando la G5 y la H5, entonces aparentemente estás seleccionando una celda, pero en realidad estás seleccionando 3 celdas.

En tu macro tienes esto:

If Target.Count > 1 Then Exit Sub

Cuando seleccionas F5, el contador de Target es 3, por lo tanto, es mayor que 1; y por eso se termina la rutina.

Entonces la corrección de tu macro podría quedar así:

If Target.Count > 100 Then Exit Sub

Puedes seleccionar hasta 100 celdas, es un número cualquiera, solamente es para permitir que la macro siga funcionando. Pero si insertas una línea o una columna, eso implica que son cientos de celdas las afectadas, entonces target tendrá un valor mayor a 100; entonces, sí y solo sí, termina la rutina.

Regresando a tu macro, lo siguiente que tienes que verificar es el valor de la columna F.

En tu macro tienes esto:

macro = Target.Value

Pero como ya te había explicado, en target tienes el valor de 3 celdas F5, H5 y G5, entonces en la variable "macro" no tienes un valor, realmente tienes 3 valores; es por eso que no se ejecuta la macro.

Lo que se tiene que hacer es tomar el dato de la columna F, de la siguiente forma:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
    If Target.Count > 100 Then Exit Sub
    If Not Intersect(Target, Range("F5:F11")) Is Nothing Then
        'On Error Resume Next
        macro = Cells(Target.Row, "F").Value
        Run macro
    End If
End Sub

Quité la instrucción On Error Resume Next, para que verifiques qué error te puede aparecer, si todo está bien, no debes tener problemas y el único error que debe aparecer es : "No se puede ejecutar la macro"; y eso es porque la macro no existe en alguno de tus módulos.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Respuesta
3

Combinar celdas siempre da lugar a futuros problemas, mira si realmente es necesario combinarlas, ya que la mayoría de veces solo responde a una estética que es epuede conseguir igual sin combinarlas.

De todos modos, prueba a borrar esta línea

If Target.Count > 1 Then Exit Sub

Muchas gracias por la respuesta

He quitado la línea que me indicas y he combinado las celdas F5:H5 y sucesivamente hasta F11:H11, pero se para en la línea Run macro

y no ejecuta la macro.

el nombre de cada macro que debe ejecutarse esta en cada línea F5 a F11

Sin combinar celdas ejecuta la macro perfectamente, pero no logro a comprender que diferencia existe con las celdas combinadas, si a todos los efectos sigue siendo F5, F6, F7 el nombre de cada celda y el titulo de cadamacro esta en esas celdas.

Acabo de cambiar la línea         

macro = Target.Value

por

macro = Activecell

y funciona, aunque por momentos se desactiva

Alguna mejora para este cambio, para que funciones correctamente?

Gracias

Pon

macro = Activecell.Value

Respuesta
1

He hecho los cambios que indicas pero no funciona, da error

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas