2012-08-13 14 views
9

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

+0

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? –

+0

@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? –

+1

@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' –

risposta

14

Ecco una funzione che fa quello che vuoi:

Function CellIsInVisibleRange(cell As Range) 
CellIsInVisibleRange = Not Intersect(ActiveWindow.VisibleRange, cell) Is Nothing 
End Function 

Almeno penso che faccia. Fino ad ora non ero a conoscenza della proprietà VisibleRange.

chiamare in:

If CellIsInVisibleRange(ActiveSheet.Range("A35")) Then 
    MsgBox "Cell is visible" 
Else 
    MsgBox "Cell isn't visible" 
End If 
+0

+ 1 Uso questa e un'altra variante per verificare la visibilità della cella. –

+0

@DougGlancy - Grazie mille. Funziona alla grande. –

+1

@SiddharthRout - Qual è l'altra variante che usi? –

Problemi correlati