Ocultar filas con celdas vacías

No he programado en mi vida una Macro, así que os cuento lo que necesito y lo que he utilizado "de oídas" buscando por internet. Tengo un Libro con distintas Hojas vinculadas y en una de ellas quiero ocultar las filas (desde la 52 hasta la 71) en las que haya una celda de la columna A que esté vacía. Las celdas de ese rango (A52:A71) son valores del tipo = (celda de otra Hoja). También necesito que la macro sea automática, es decir que se ejecute al abrir el libro y que se actualice o se ejecute también cuando se introduzcan datos en un rango de celdas de esa misma hoja (A24:H33).
La macro que he intentado es:
Private Sub Workbook_Change(ByVal Target As Range)
With (a24:h33)
Application.ScreenUpdating = False
For i = 52 To 71
If ActiveCell = "" Or IsNull(ActiveCell) Then
celda = ActiveCell.Address
Selection.EntireRow.Hidden = True
If ActiveCell.Row <> 52 Then Range(celda).Offset(-1, 0).Select
End If
ActiveCell.Offset(1, 0).Select
Next
Application.ScreenUpdating = True
End Sub
Pero con esta macro me oculta las filas de las dos primeras celdas vacías y si la primera celda no está vacía y la siguiente sí, me muestra ambas filas.

2 Respuestas

Respuesta
1
A ver si te sirve esto (asumiendo que la hoja en cuestión es "Hoja1"). Primero andá al VBA e insertá un módulo; en dicho módulo insertá el siguiente código
Sub ocultaFilas(queHoja As String)
Dim it As Long
Sheets(queHoja).Select
For it = 49 To 68
If Cells(it, 1) = "" Then Cells(it, 1).EntireRow.Hidden = True
Next it
End Sub
Luego andá al objeto ThisWorkbook y escribí el siguiente código (para que se ejecute cuando abrís el archivo
Private Sub Workbook_Open()
ocultaFilas "Hoja1"
End Sub
y finalmente en la hoja en cuestión (asumo que Hoja1) escribí lo siguiente
If Not (Intersect(Target, Range("A24:H33")) Is Nothing) Then
ocultaFilas "Hoja1"
End If
End Sub
Buenos días gfellay y muchas gracias por tu respuesta. Después de hacer todo lo que me indicabas y guardarlo, cuando abro el libro me da el mensaje de error:
Se ha producido el error '9' en tiempo de ejecución: Subíndice fuera del intervalo.
Y al darle a Depurar me sitúa dentro del código del Módulo 1 en el 3ª línea: Sheets(queHoja). Select
Como no tengo ni idea de Macros, me he limitado a copiar literalmente las instrucciones que me indicabas y, quizá, me falte finalizar alguna instrucción o cualquier otra tontería, así que perdona por seguir dándote la paliza y un saludo.
Decime el nombre de las hojas de tu libro, calculo que el problema pasa por allí, en este ejemplo yo estoy asumiendo que la hoja donde lo querés ejecutar se llama "Hoja1" pero calculo que no es así.
Se trata de la Hoja 5 a la que he llamado "Cta. Justificativa". Yo en las instrucciones de la Macro puse Hoja 5 y pensé que la reconocería por que en el VBA Project aparece como Hoja 5(Cta. Justificativa).
Saludos cordiales.
Efectivamente gfellay, diste en el clavo. Entrecomillé el nombre correcto y funcionando a todo tren. No sabes cómo te agradezco tu ayuda, que fue rápida, clara y directa.
Un abrazo a los "cerebros" argentinos desde Madrid.
Respuesta
Prueba con este código:
Sub Delete_N_MarkedRows()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim lastrow As Long, r As Long
lastrow = Range("A71")
For r = lastrow To 1 Step -1
If UCase(Cells(r, 31).Value) = "" Then Rows(r).Hide
Next r
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas