Estoy intentando ocultar todas las filas que contienen el valor "xx" en la columna A y no ocultar las filas que contienen "a" en la columna A. El rango es de A8:A556. Esta macro debe activarse mediante un cambio en la celda C4.
¿Alguna idea de por qué no funciona? Aquí está el intento actual:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(True, True) = "$C$4" Then
If Range("A8:A555").Value = "xx" Then
Rows("8:555").EntireRow.Hidden = True
ElseIf Range("A8:A555").Value = "a" Then
Rows("8:555").EntireRow.Hidden = False
End If
End If
End Sub
¡Gracias!
EDITAR:
Hola Fixer1234, aquí está el detalle:
- Es posible que "xx" y "a" no existan juntos si la macro funciona correctamente.
- Sólo se deben ocultar las filas "xx"
- Los valores "xx" no se combinan con valores que no se pueden ocultar.
- Los valores "a" no se combinan con valores que deben ocultarse.
- hay otras filas que no contienen "xx o "a" que no es necesario ocultar (¿debería agregar una "a" a estas columnas o eliminar completamente IfElse?).
- La fila "xx" contiene otras fórmulas; un resultado en blanco de la fórmula significa que la fila debe estar oculta.
- Las filas "a" tienen la misma fórmula pero producen un resultado y no deben ocultarse.
Error de tiempo de ejecución '13': el tipo no coincide y luego la depuración va al primero
If Range("A8:A555").Value = "xx" Then
Respuesta1
No puedes probar todos los valores en un rango usando Range("A8:A555").Value = "xx"
. Se producirá un error de tipo no coincidente.
Debe recorrer cada celda del rango y probar individualmente si es Value
igual a "xx".
Para que el código se ejecute más rápido, no oculte las filas a medida que las detecte, sino cree una Range
para Ranges
ocultarlas y luego ocultelas todas a la vez.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range
Dim RangeToHide As Range
'Test if Target is C4
If Not Intersect(Target, [C4]) Is Nothing Then
'Loop through each cell in range and test if it's "xx"
For Each cel In Range("A8:A555")
If cel = "xx" Then
If RangeToHide Is Nothing Then
'Initialise RangeToHide because Union requires at least 2 ranges
Set RangeToHide = cel
Else
'Add cel to RangeToHide
Set RangeToHide = Union(RangeToHide, cel)
End If
End If
Next
RangeToHide.EntireRow.Hidden = True
End If
End Sub
Respuesta2
Utilice este código VBA como módulo estándar, le ayudará a ocultar todas las filas que tengan XX
o xx
en la columna A
.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(True, True) = "$C$4" Then
Dim i As Integer
Application.ScreenUpdating = False
For i = 8 To 255
If Sheets("Sheet1").Range("A" & i).Value = "XX" Or Sheets("Sheet1").Range("A" & i).Value = "xx" Then
Rows(i & ":" & i).EntireRow.Hidden = True
End If
Next i
End If
Application.ScreenUpdating = True
End Sub
NÓTESE BIEN
No es necesario utilizar ningún código para mostrar las filas que tienen a
o A
, ya que ya son visibles. Y, sobre todo, el código utilizado oculta filas específicas en la columna A
.
Respuesta3
¿Cómo oculto filas separadas?
Así es como pienso:
Private Sub CheckBox1_Click()
If CheckBox1 = False Then
[15:15].EntireRow.Hidden = True
[3:3].EntireRow.Hidden = True
Else
[15:15].EntireRow.Hidden = False
[3:3].EntireRow.Hidden = False
End If
Saludos cordiales
Mattías