Necesito encontrar si una celda está visible en la pantalla.¿Cómo determinar si una celda de la hoja de trabajo es visible/mostrada en VBA?
Por visible, no me refiero a oculto. Estoy tratando específicamente de encontrar si una celda se muestra actualmente en la hoja activa, o si no se muestra, es decir: se ha desplazado de la hoja activa visible.
He mirado en línea, y sólo puedo encontrar el código siguiente que no parece funcionar para mí:
Private Sub CommandButton1_Click()
With Worksheets(1).Cells(10, 10)
'MsgBox "Value: " & .Value & ", Top: " & .Top & ", Left: " & .Left
Dim visibleCells As Range
Set visibleCells = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
If Intersect(Worksheets(1).Cells(10, 10), visibleCells) Is Nothing Then
MsgBox "This cell is not visible."
End If
End With
End Sub
Gracias de antemano por su ayuda,
Marwan
Sólo por curiosidad ... ¿Qué pasa si dicen la celda A4 se oculta y se puede ver hasta el decir filas 41. ¿consideraría la celda A4 visibles u ocultos? Además, ¿qué dirías para las células que son parcialmente visibles? –
@SiddharthRout - Considero que la celda A4 es visible. Algunos antecedentes sobre lo que estoy tratando de lograr, necesito encontrar el IZQUIERDO y el TOP de una celda en particular. Así que necesito iterar a través de las celdas hacia la izquierda y a través de las celdas que están encima. Necesito comprobar si esas celdas son visibles, y si lo son, necesito sumar su ancho (o altura). El problema con el que me estoy encontrando ahora es que algunas de las celdas están congeladas y no aparecen como parte del rango visible. No estoy seguro de cómo lidiar con eso. ¿Alguna ayuda o sugerencia? –
@SiddharthRout - Descubrí cómo verificar si la celda está "congelada" o no, usando el siguiente código: 'Función CellIsInFrozenRange (celda Como rango)' 'Dim inRow As Boolean' ' Dim inColumn As Boolean' 'If (ActiveWindow.SplitRow> 0) Then' ' inRow = No Intersecar (celda, Rango (Celdas (1, 1), ' ' Celdas (ActiveWindow.SplitRow, 1) .End (xlEnd))) No es nada ' ' End If' 'If (ActiveWindow.SplitColumn> 0) Then' ' inColumn = No Intersecta (celda, Rango (Celdas (1, 1), Celdas (1, ActiveWindow.SplitColumn) .End (xlDown))) Es Nothing' 'End If' ' CellIsInFrozenRange = (inRow or inColumn) ' ' End Function' –