Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ejecutar Macro si cambia el valor de una celda

961 views
Skip to first unread message

PANTELIZ

unread,
Oct 22, 2008, 10:28:14 PM10/22/08
to
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

Héctor Miguel

unread,
Oct 22, 2008, 10:48:36 PM10/22/08
to
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.

PANTELIZ

unread,
Oct 22, 2008, 10:56:34 PM10/22/08
to
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" <NOhemiordiS...@PLShotmail.com>
wrote:

> > End Sub- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Héctor Miguel

unread,
Oct 22, 2008, 11:17:20 PM10/22/08
to
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

PANTELIZ

unread,
Oct 22, 2008, 11:31:29 PM10/22/08
to
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" <NOhemiordiS...@PLShotmail.com>
wrote:

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

Héctor Miguel

unread,
Oct 23, 2008, 12:03:28 AM10/23/08
to
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.


AnSanVal

unread,
Oct 24, 2008, 5:31:41 AM10/24/08
to
Si tan importante es que funcione con los textos: "Visible" y "Oculta", puedes probar añadiendo a la eficiente solución
de Héctor lo siguiente:

1.- [D21:D25] Formato de celdas>Personalizada ( ;"Visible";"Oculta" ) [sin paréntesis].
2.- Agrega al código de modo que quede:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("d21:d25")) Is Nothing Then

Application.EnableEvents = False
If Target.Value = "Visible" Then Target = -1
If Target.Value = "Oculta" Then Target = 0
Application.EnableEvents = True
End If


If Not Intersect(Target, Range("d21:d25")) Is Nothing Then _

Target.Offset(-14).EntireRow.Hidden = Not Target
End Sub

Saludos: Antonio.
************************************************
"Héctor Miguel" <NOhemio...@PLShotmail.com> escribió en el mensaje news:u8nBQRMN...@TK2MSFTNGP05.phx.gbl...

Héctor Miguel

unread,
Oct 24, 2008, 8:21:25 AM10/24/08
to
hola, chicos !

(creo que) tambien podrias recortar este codigo modificando la propuesta original +/- a lo siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("d21:d25")) Is Nothing Then _

Target.Offset(, -14).EntireRow.Hidden = Target <> "Visible"
End Sub

solo asegurarse de las (may/min)isculas o cambiar la parte final de la evaluacion +/- a:
LCase(Target) <> "visible"

saludos,
hector.

__ OP __
> AnSanVal escribio en el mensaje ...
>
> Si tan importante es que funcione con los textos: "Visible" y "Oculta", puedes probar añadiendo... lo siguiente:


>
> 1.- [D21:D25] Formato de celdas>Personalizada ( ;"Visible";"Oculta" ) [sin paréntesis].
> 2.- Agrega al código de modo que quede:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> If Not Intersect(Target, Range("d21:d25")) Is Nothing Then
> Application.EnableEvents = False
> If Target.Value = "Visible" Then Target = -1
> If Target.Value = "Oculta" Then Target = 0
> Application.EnableEvents = True
> End If
> If Not Intersect(Target, Range("d21:d25")) Is Nothing Then _
> Target.Offset(-14).EntireRow.Hidden = Not Target
> End Sub
>
> Saludos: Antonio.

>> Héctor Miguel escribio en el mensaje ...

0 new messages