2012-08-13 59 views
9

我需要找到一個單元格是否在屏幕上可見。如何確定工作表單元格是否在VBA中可見/顯示?

通過可見,我並不意味着隱藏。我特別試圖找出一個單元格當前是否顯示在活動工作表中,或者是否未顯示,即:它已從可見活動工作表中滾動。

我在網上看了,也只能找到如下代碼似乎並沒有爲我工作:

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 

預先感謝您的幫助,

馬爾

+0

只是好奇......如果說有什麼A4單元格是隱藏的,你可以看到截止到你可以考慮電池A4可見或隱藏行說41?另外你會說部分可見的細胞? – 2012-08-13 23:17:12

+0

@SiddharthRout - 我會認爲單元格A4是可見的。關於我想要完成的一些背景知識,我需要找到特定單元格的左側和頂部。所以我需要遍歷單元格到它的左側並通過它上面的單元格。我需要檢查這些單元格是否可見,如果是,我需要總結它們的寬度(或高度)。我現在遇到的問題是,一些單元格被凍結,並且不會顯示爲可見範圍的一部分。我不知道該如何處理。任何幫助或建議? – 2012-08-15 05:05:05

+1

@SiddharthRout - 我想通過使用以下代碼來檢查單元格是否「凍結」: '函數CellIsInFrozenRange(單元格爲範圍)' 'Dim inRow As Boolean' 'Dim inColumn As Boolean'如果(ActiveWindow.SplitRow> 0)then' 'inRow = Not Intersect(cell,Range(Cells(1,1),' 'Cells(ActiveWindow.SplitRow,1).End(xlEnd)))Is Nothing如果(ActiveWindow.SplitColumn> 0)Then' 'inColumn = Not Intersect(cell,Range(Cells(1,1),Cells(1,ActiveWindow.SplitColumn).End(xlDown))如果(ActiveWindow.SplitColumn> 0)Then' '' 'End If' ' )Is Nothing' 'End If' 'CellIsInFrozenRange =(inRow or inColumn)' 'End Function' – 2012-08-15 06:01:10

回答

14

這裏的一個功能,可以做你想做的:

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

至少我認爲它的確如此。直到現在,我還沒有意識到VisibleRange屬性。

這樣稱呼它:

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

+ 1我用這個和另一個變體來檢查單元格的可見性。 – 2012-08-13 22:44:30

+0

@DougGlancy - 非常感謝。這很好。 – 2012-08-13 23:17:52

+1

@SiddharthRout - 您使用的其他變體是什麼? – 2012-08-13 23:18:22

相關問題