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
- 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.
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 -
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
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 -
> ... 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.
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...
(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 ...