2012-08-13 44 views
9

Tôi cần tìm xem ô có hiển thị trên màn hình hay không.Làm thế nào để xác định xem một ô bảng tính có thể nhìn thấy/được hiển thị trong VBA?

Hiển thị, tôi không có nghĩa là bị ẩn. Tôi đặc biệt cố gắng tìm một ô hiện đang được hiển thị trong trang tính đang hoạt động hay không, nếu nó không được hiển thị, tức là: ô đó đã được cuộn ra khỏi trang tính hiện hoạt.

tôi đã xem xét trực tuyến, và chỉ có thể tìm thấy đoạn mã sau đó dường như không làm việc cho tôi:

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 

Cảm ơn trước sự giúp đỡ của bạn,

Marwan

+0

Chỉ Tò mò ... Nếu nói di A4 được ẩn đi và bạn có thể nhìn thấy cho đến nói hàng 41. Bạn có xem xét ô A4 có thể nhìn thấy hoặc ẩn? Ngoài ra Bạn sẽ nói gì cho các ô có thể nhìn thấy một phần? –

+0

@SiddharthRout - Tôi sẽ xem xét ô A4 là hiển thị. Một số nền tảng về những gì tôi đang cố gắng hoàn thành, tôi cần tìm LEFT và TOP của một ô cụ thể. Vì vậy, tôi cần phải lặp lại thông qua các tế bào để nó còn lại và thông qua các tế bào trên nó. Tôi cần kiểm tra xem các ô đó có hiển thị hay không và nếu chúng có, tôi cần tính tổng chiều rộng của chúng (hoặc chiều cao). Vấn đề mà tôi đang chạy vào ngay bây giờ, là một số các tế bào được đông lạnh, và không hiển thị như là một phần của phạm vi nhìn thấy được. Tôi không chắc chắn làm thế nào để đối phó với điều đó. Bất kỳ trợ giúp hoặc gợi ý nào? –

+1

@SiddharthRout - Tôi đã tìm ra cách kiểm tra xem ô có bị "cố định" hay không, bằng cách sử dụng mã sau: 'Hàm CellIsInFrozenRange (ô dưới dạng dải ô)' 'Dim inRow As Boolean' ' Dim inColumn As Boolean' 'If (ActiveWindow.SplitRow> 0) Then ' ' inRow = Không Intersect (ô, Dải ô (Ô (1, 1), ' ' Ô (ActiveWindow.SplitRow, 1) .End (xlEnd))) Không có gì ' ' End If' 'If (ActiveWindow.SplitColumn> 0) Sau đó' ' inColumn = Không Intersect (ô, Dải ô (Ô (1, 1), Ô (1, ActiveWindow.SplitColumn) .End (xlDown))) Không có gì là ' 'Kết thúc nếu' ' CellIsInFrozenRange = (inRow hoặc inColumn) ' ' End Function' –

Trả lời

14

Dưới đây là một chức năng thực hiện những gì bạn muốn:

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

Ít nhất là tôi nghĩ vậy. Tôi đã không nhận thức được tài sản VisibleRange cho đến bây giờ.

Gọi nó thích:

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

+ 1 Tôi sử dụng điều này và một biến thể khác để kiểm tra khả năng hiển thị của ô. –

+0

@DougGlancy - Cảm ơn rất nhiều. Điều đó hoạt động rất tốt. –

+1

@SiddharthRout - Biến thể khác mà bạn sử dụng là gì? –

Các vấn đề liên quan