Devo trovare se una cella è visibile sullo schermo.Come determinare se una cella del foglio di lavoro è visibile/visualizzata in VBA?
Con visibile, non intendo nascosto. Sto specificatamente cercando di scoprire se una cella è attualmente visualizzata nel foglio attivo, o se non è visualizzata, cioè: è stata scorsa dal foglio attivo visibile.
ho guardato on-line, e può trovare solo il seguente codice che non sembra funzionare per me:
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
Grazie in anticipo per il vostro aiuto,
Marwan
solo curioso ... Che cosa succede se dire la cella A4 è nascosto e si può vedere fino ad dire righe 41. Vuoi prendere in considerazione la cella A4 visibile o nascosta? Inoltre cosa diresti per le celle parzialmente visibili? –
@SiddharthRout - Prenderò in considerazione la cella A4 come visibile. Alcune informazioni su ciò che sto cercando di realizzare, ho bisogno di trovare la sinistra e la parte superiore di una cella particolare. Quindi ho bisogno di scorrere le celle verso sinistra e attraverso le celle sopra di esso. Devo controllare se quelle celle sono visibili, e se lo sono, ho bisogno di sommare la loro larghezza (o altezza). Il problema in cui mi sto imbattendo in questo momento è che alcune celle sono bloccate e non vengono visualizzate come parte dell'intervallo visibile. Non sono sicuro di come affrontarlo. Qualsiasi aiuto o suggerimento? –
@SiddharthRout - Ho capito come verificare se la cella è "congelata" o meno, utilizzando il seguente codice: 'Funzione CellIsInFrozenRange (cella come intervallo)' 'Dim inRow As Boolean' ' Dim inColumn As Boolean' 'If (ActiveWindow.SplitRow> 0) Then' ' inRow = Non intersecato (cella, intervallo (Celle (1, 1), ' ' Celle (ActiveWindow.SplitRow, 1) .End (xlEnd))) Non c'è niente ' ' End If' 'If (ActiveWindow.SplitColumn> 0) Then' ' inColumn = Not Intersect (cella, intervallo (celle (1, 1), celle (1, ActiveWindow.SplitColumn) .End (xlDown))) Is Nothing' 'End If' ' CellIsInFrozenRange = (inRow o inColumn) ' ' End Function' –