rango de celdas para activacion de macro por cambio de valor

brantis

New Member
Joined
Nov 21, 2006
Messages
3
Vi en otra liga que contestaban como ligar la activacion de un macro con el cambio de valor de una celda y pusieron esta respuesta:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$D$10" Then Mimacro

End Sub

Mi pregunta es como hago lo mismo pero para un rango de celdas en vez de que solo cheque el cambio de una sola??????

Muchas Gracias!!!
 

galileogali

Well-known Member
Joined
Oct 14, 2005
Messages
748
Hya muchas respuesta a esta pregunta. Una de carcater general es la que usa Intersect

Private Sub Worksheet_Change(ByVal Target As Range)


dim rng as range
set rng = Range("a1:b34") ' el rango que gnerara el evento es "a1:b34"

If intersect(Target,rng) is Nothing then exit sub

Mi Macro

End Sub

GALILEOGALI
 

brantis

New Member
Joined
Nov 21, 2006
Messages
3
Gracias!!!

Muchas Gracias!!! Funciono muy bien el hacerlo como me sugieres!!! :p
 

brantis

New Member
Joined
Nov 21, 2006
Messages
3
Gracias!!!

Muchas Gracias!!! Funciono muy bien el hacerlo como me sugieres!!! :p
 

Greg Truby

MrExcel MVP
Joined
Jun 19, 2002
Messages
9,999
Hola brantis y bienvenido a MrExcel. Como Galí ya indicó, la función clave es Intersect() y el objecto vacio Nothing y el operador de comparación de objetos IS

En casos asi (tomando una acción dentro de _Change) siempre aconsejo que uno utilice rangos nombrados en vez de direcciones escritos dentro del macro. Con un rango nombrado, si el usuario (o usted) inserta o suprima filas/columnas/celdas el macro sigue funcionando bien. Pero si pone la dirección de forma "hard coded" en el macro, insertar o suprimir a la izquierda o arriba del blanco causa problemas. Ejemplo:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    '// el cuaderno tiene un rango definido "TestRange"
    
    Dim rngCell As Range, rngIntersect As Range
    
    If Not Intersect(Range("TestRange"), Target) Is Nothing Then
        Set rngIntersect = Intersect([TestRange], Target)
        For Each rngCell In rngIntersect.Cells
            Application.EnableEvents = False
            MiMacro rngCell
            Application.EnableEvents = True
        Next rngCell
    End If
End Sub

Private Sub MiMacro(rngTarget As Range)
    rngTarget.Formula = UCase(rngTarget.Formula)
End Sub
Favor note el uso de
Code:
Application.EnableEvents
Por lo general cuando un está haciendo algo dentro de una rutina de eventos es buenas idea apagar los eventos. Si no lo hace es muy fácil generar un bucle infinito.
<hr />Hola, Galí. Todo bien, espero.
 

jmpadini

New Member
Joined
May 14, 2019
Messages
1
Hola disculpen soy nuevo en este foro, sé que este post ya tiene sus años, pero me encuentro en una situación en la que busco pedirles de su valiosa ayuda y gran experienciia; estoy en un caso similar, tengo 2 columnas con lista desplegables la 2a depende de lo que se seleccione de la primera; mi problema es que requiero que si al cambiar la primer columna, la segunda borré o reinicie lo que antes seleccinado; tengo un código pero es para una sola celda, y yo busco fuera para un rango, es decir más lineas hacia abajo de la misma columna (secundaria), el código es:
If Target = Range("A2") Then 'en esta primer columna se selecciona de la lista desplegable Range("B2").Value = "" 'en eta otra esta la segunda columna donde hay lista desplegable que borra la celda si cambia la primera.
End If

End Sub

Su amable experiencia me es de gran ayuda, agradezco cualquier comentario.
 

Forum statistics

Threads
1,077,907
Messages
5,337,096
Members
399,125
Latest member
manibiotech

Some videos you may like

This Week's Hot Topics

Top