Macro que se ejecute cuando cambia un valor
Tengo un archivo de excel con 2 hojas (hoja1 y hoja2)
En la hoja2, hice un código para que se ejecute una macro automáticamente cada que cambien los valores de una celda la D11. Si cambian el valor de esta celda, y le ponen un 0 necesito que me oculte todas aquellas columnas en las que la fila 11 tiene valor de 0
Esto lo hace sin problema cuando yo coloco un 0 en la celda D11(hoja2), busca en toda la fila 11 los otros 0 y oculta las columnas.
El problema es que en el archivo yo no voy a introducir el valor directo en D11 (hoja2), si no que lo introduzco en la hoja1, y la celda D11 de la hoja2 tiene una fórmula =hoja1! $D$4 pero cuando yo a D4 de la hoja1 le cambio el valor a 0, si lo cambia en D11 de la hoja2, pero no ejecuta la macro, esta solo se ejecuta si el valor es introducido directamente en la hoja2 y esto no lo puedo hacer.
Este es el código que yo hice
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target.Address = "$D$11" Then
If Cells(11, 4).Value = 0 Then
Range("D11").Select
Do While Not IsEmpty(ActiveCell)
If Trim(LCase(ActiveCell)) = 0 Then
Selection.EntireColumn.Hidden = True
Else
Selection.EntireColumn.Hidden = False
End If
ActiveCell.Offset(0, 1).Select
Loop
End If
Else
Range("D11").Select
End If
ActiveSheet.Unprotect
End Sub
También pensé colocar el código en la hoja1 y que cada que cambiara el valor de D4 (hoja1), se fuera a la hoja 2 y buscara en la fila 11 los 0 y ocultara las columnas pero no me salio.
Hice este código, pero marca error en Range("D11"). Select, y si quito esta línea, si lo hace siempre y cuando yo deje el cursor en esta celda D11 (hoja2) y luego cambie el valor de D4 (hoja1) y se ejecuta la macro bien, pero esto no es funcional por que no seré yo quien use el archivo y no puedo asegurar que el cursor siempre este en D11. Necesito que la macro solita se situé en D11 y busque los 0.
Este es el código de mi 2da opción
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target.Address = "$D$6" Then
If Cells(6, 4).Value = 0 Then
Sheets("Hoja2").Activate
Range("D11").Select
Do While Not IsEmpty(ActiveCell)
If Trim(LCase(ActiveCell)) = 0 Then
Selection.EntireColumn.Hidden = True
Else
Selection.EntireColumn.Hidden = False
End If
ActiveCell.Offset(0, 1).Select
Loop
Sheets("Hoja1").Select
Else
Sheets("Hoja1").Select
End If
End If
ActiveSheet.Unprotect
End Sub
Espero que me haya explicado, si necesitas el archive dime.
Te agradezco muchísimo soy muy nueva en esto de las macros
En la hoja2, hice un código para que se ejecute una macro automáticamente cada que cambien los valores de una celda la D11. Si cambian el valor de esta celda, y le ponen un 0 necesito que me oculte todas aquellas columnas en las que la fila 11 tiene valor de 0
Esto lo hace sin problema cuando yo coloco un 0 en la celda D11(hoja2), busca en toda la fila 11 los otros 0 y oculta las columnas.
El problema es que en el archivo yo no voy a introducir el valor directo en D11 (hoja2), si no que lo introduzco en la hoja1, y la celda D11 de la hoja2 tiene una fórmula =hoja1! $D$4 pero cuando yo a D4 de la hoja1 le cambio el valor a 0, si lo cambia en D11 de la hoja2, pero no ejecuta la macro, esta solo se ejecuta si el valor es introducido directamente en la hoja2 y esto no lo puedo hacer.
Este es el código que yo hice
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target.Address = "$D$11" Then
If Cells(11, 4).Value = 0 Then
Range("D11").Select
Do While Not IsEmpty(ActiveCell)
If Trim(LCase(ActiveCell)) = 0 Then
Selection.EntireColumn.Hidden = True
Else
Selection.EntireColumn.Hidden = False
End If
ActiveCell.Offset(0, 1).Select
Loop
End If
Else
Range("D11").Select
End If
ActiveSheet.Unprotect
End Sub
También pensé colocar el código en la hoja1 y que cada que cambiara el valor de D4 (hoja1), se fuera a la hoja 2 y buscara en la fila 11 los 0 y ocultara las columnas pero no me salio.
Hice este código, pero marca error en Range("D11"). Select, y si quito esta línea, si lo hace siempre y cuando yo deje el cursor en esta celda D11 (hoja2) y luego cambie el valor de D4 (hoja1) y se ejecuta la macro bien, pero esto no es funcional por que no seré yo quien use el archivo y no puedo asegurar que el cursor siempre este en D11. Necesito que la macro solita se situé en D11 y busque los 0.
Este es el código de mi 2da opción
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target.Address = "$D$6" Then
If Cells(6, 4).Value = 0 Then
Sheets("Hoja2").Activate
Range("D11").Select
Do While Not IsEmpty(ActiveCell)
If Trim(LCase(ActiveCell)) = 0 Then
Selection.EntireColumn.Hidden = True
Else
Selection.EntireColumn.Hidden = False
End If
ActiveCell.Offset(0, 1).Select
Loop
Sheets("Hoja1").Select
Else
Sheets("Hoja1").Select
End If
End If
ActiveSheet.Unprotect
End Sub
Espero que me haya explicado, si necesitas el archive dime.
Te agradezco muchísimo soy muy nueva en esto de las macros
1 Respuesta
Respuesta de duainsulch
1