Ejecutar Macro si cambia el valor de una celda

23/10/2008 - 04:28 por PANTELIZ | Informe spam
Quiero ejecutar una macro dependiendo del valor de una celda, el valor
de la celda esta limitado a "oculta" o "visible" desde una validación
en la celda.

cuando seleccione el valor de "visible" debe ejecutar la macro1
Sub Macro1()
'
Rows("17:17").Select
Selection.EntireRow.Hidden = True
End Sub

cuando seleccione el valor de "oculto" debe ejecutar la macro2
Sub Macro2()
'
Rows("17:17").Select
Selection.EntireRow.Hidden = False
End Sub

Agradezco su colaboracion

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/10/2008 - 04:48 | Informe spam
hola, 'anonimo/a' !

- el codigo pudiera ir en el modulo de "esa" hoja (clic-secundario sobre su etiqueta/nombre y selecciona "ver codigo")

- el evento que deberas usar es el que se llama "Change" (cuando cambia el dato ENTRADO en la celda)
debes condicionar la ejecucion del evento a que la celda que se modifica sea "la celda con la validacion" (que es... ???)

si comentas/expnes detalles mas "precisos"... puedes esperar una respuesta mas "concreta"
(incluso, podria ser importante cual es la version de excel y de donde se toma la lista en la validacion)

saludos,
hector.

__ OP __
Quiero ejecutar una macro dependiendo del valor de una celda
el valor de la celda esta limitado a "oculta" o "visible" desde una validacion en la celda.
cuando seleccione el valor de "visible" debe ejecutar la macro1
Sub Macro1()
Rows("17:17").Select
Selection.EntireRow.Hidden = True
End Sub

cuando seleccione el valor de "oculto" debe ejecutar la macro2
Sub Macro2()
Rows("17:17").Select
Selection.EntireRow.Hidden = False
End Sub
Respuesta Responder a este mensaje
#2 PANTELIZ
23/10/2008 - 04:56 | Informe spam
Bueno si creo que omiti algunos detalles

La celda que cambia es la d21

La versión de excel es office 2007


Private Sub worksheet_selectionchange(ByVal Target As Range)
If Target.Address = "$d$21" Then ' si cambia la celda d21
If ActiveWorkbook.Sheets("hoja2").Range("d21").Value = "verdadero"
Then
Macro2
Else
If ActiveWorkbook.Sheets("hoja2").Range("d21").Value = "falso" Then
Macro1
End If
End If
End If
End Sub

Estaba intentando con eso pero no me funciono.

On 22 oct, 21:48, "Héctor Miguel"
wrote:
hola, 'anonimo/a' !

- el codigo pudiera ir en el modulo de "esa" hoja (clic-secundario sobre su etiqueta/nombre y selecciona "ver codigo")

- el evento que deberas usar es el que se llama "Change" (cuando cambia el dato ENTRADO en la celda)
  debes condicionar la ejecucion del evento a que la celda que se modifica sea "la celda con la validacion" (que es... ???)

si comentas/expnes detalles mas "precisos"... puedes esperar una respuesta mas "concreta"
(incluso, podria ser importante cual es la version de excel y de donde se toma la lista en la validacion)

saludos,
hector.

__ OP __



> Quiero ejecutar una macro dependiendo del valor de una celda
> el valor de la celda esta limitado a "oculta" o "visible" desde una validacion en la celda.
> cuando seleccione el valor de "visible" debe ejecutar la macro1
> Sub Macro1()
>   Rows("17:17").Select
>   Selection.EntireRow.Hidden = True
> End Sub

> cuando seleccione el valor de "oculto" debe ejecutar la macro2
> Sub Macro2()
>   Rows("17:17").Select
>   Selection.EntireRow.Hidden = False
> End Sub- Ocultar texto de la cita -

- Mostrar texto de la cita -
Respuesta Responder a este mensaje
#3 Héctor Miguel
23/10/2008 - 05:17 | Informe spam
hola, 'anonimo/a' !

hay una cierta "ambiguedad" en tus detalles (p.e. si D21 "controla" a la fila 17 y/o hubiera mas casos parecidos ?)
y el evento "worksheet_selectionchange" corresponde al modulo de codigo del libro (ThisWorkbook)
y este evento es aplicable para cualquier hoja en el libro (por eso es que despues "determinas" si se trata de la hoja "X")

si suponemos que solo se trata de que la celda D21 va a controlar la visibilidad de la fila 17...
y que los valores posibles en la celda D21 son VERDADERO/FALSO (<= OJO que NO sean texto)
copia/pega (o escribe) lo siguiente en el modulo de codigo de "esa" hoja (NO en el ThisWorkbook)...

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$21" Then Range("a17").EntireRow.Hidden = Not Target
End Sub

saludos,
hector.

__ OP __
Bueno si creo que omiti algunos detalles
La celda que cambia es la d21
La version de excel es office 2007

Private Sub worksheet_selectionchange(ByVal Target As Range)
If Target.Address = "$d$21" Then ' si cambia la celda d21
If ActiveWorkbook.Sheets("hoja2").Range("d21").Value = "verdadero" Then
Macro2
Else
If ActiveWorkbook.Sheets("hoja2").Range("d21").Value = "falso" Then
Macro1
End If
End If
End If
End Sub

Estaba intentando con eso pero no me funciono.
Respuesta Responder a este mensaje
#4 PANTELIZ
23/10/2008 - 05:31 | Informe spam
Hector

Mira la solución q encontre:

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("d21:d25")) Is Nothing Then
Exit Sub
End If ' Area de trabajo.

Dim celda21 As Range
Dim celda22 As Range
Dim celda23 As Range
Dim celda24 As Range
Dim celda25 As Range
Set celda21 = Worksheets("hoja2").Range("d21")
Set celda22 = Worksheets("hoja2").Range("d22")
Set celda23 = Worksheets("hoja2").Range("d23")
Set celda24 = Worksheets("hoja2").Range("d24")
Set celda25 = Worksheets("hoja2").Range("d25")

If celda21 = "visible" Then
Rows("7:7").Select
Selection.EntireRow.Hidden = False

Else
Rows("7:7").Select
Selection.EntireRow.Hidden = True
End If

If celda22 = "visible" Then
Rows("8:8").Select
Selection.EntireRow.Hidden = False

Else
Rows("8:8").Select
Selection.EntireRow.Hidden = True
End If

If celda23 = "visible" Then
Rows("9:9").Select
Selection.EntireRow.Hidden = False

Else
Rows("9:9").Select
Selection.EntireRow.Hidden = True
End If

If celda24 = "visible" Then
Rows("10:10").Select
Selection.EntireRow.Hidden = False

Else
Rows("10:10").Select
Selection.EntireRow.Hidden = True
End If

If celda25 = "visible" Then
Rows("11:11").Select
Selection.EntireRow.Hidden = False

Else
Rows("11:11").Select
Selection.EntireRow.Hidden = True
End If

Worksheets("hoja2").Range("e7").Select

End Sub

Que te parece, o existe otra mejor.


On 22 oct, 22:17, "Héctor Miguel"
wrote:
hola, 'anonimo/a' !

hay una cierta "ambiguedad" en tus detalles (p.e. si D21 "controla" a la fila 17 y/o hubiera mas casos parecidos ?)
y el evento "worksheet_selectionchange" corresponde al modulo de codigo del libro (ThisWorkbook)
y este evento es aplicable para cualquier hoja en el libro (por eso es que despues "determinas" si se trata de la hoja "X")

si suponemos que solo se trata de que la celda D21 va a controlar la visibilidad de la fila 17...
y que los valores posibles en la celda D21 son VERDADERO/FALSO (<= OJO que NO sean texto)
copia/pega (o escribe) lo siguiente en el modulo de codigo de "esa" hoja (NO en el ThisWorkbook)...

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$D$21" Then Range("a17").EntireRow.Hidden = Not Target
End Sub

saludos,
hector.

__ OP __



> Bueno si creo que omiti algunos detalles
> La celda que cambia es la d21
> La version de excel es office 2007

> Private Sub worksheet_selectionchange(ByVal Target As Range)
> If Target.Address = "$d$21" Then ' si cambia la celda d21
> If ActiveWorkbook.Sheets("hoja2").Range("d21").Value = "verdadero" Then
> Macro2
> Else
> If ActiveWorkbook.Sheets("hoja2").Range("d21").Value = "falso" Then
> Macro1
> End If
> End If
> End If
> End Sub

> Estaba intentando con eso pero no me funciono.- Ocultar texto de la cita -

- Mostrar texto de la cita -
Respuesta Responder a este mensaje
#5 Héctor Miguel
23/10/2008 - 06:03 | Informe spam
hola, (como sea que te llames), !

... la solucion q encontre: (...) o existe otra mejor.



(p.e.)

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("d21:d25")) Is Nothing Then _
Target.Offset(, -14).EntireRow.Hidden = Not Target
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida