2015-11-09 16 views
5

Tôi có khối mã này giúp nút xác định hàng nào trong đó. Tuy nhiên, khi tôi ẩn hàng trên, nút này tham chiếu hàng ẩn đó.Nút tham chiếu hàng không chính xác trong excel

Ví dụ: nếu nút là trên hàng 20 và tôi giấu hàng 19, nhấp vào nút lợi nhuận hàng 19. Nếu tôi giấu cả hai hàng 19 và 18, nút lợi nhuận hàng 18.

Nó thực sự kỳ lạ.

Đây là khối mà tôi sử dụng để tạo ra các nút:

Sub AddButtons() 
    Dim button As button 
    Application.ScreenUpdating = False 

    Dim st As Range 
    Dim sauce As Integer 

    For sauce = 10 To Range("F" & Rows.Count).End(xlUp).Row Step 1 
    Set st = ActiveSheet.Range(Cells(sauce, 11), Cells(sauce, 11)) 
    Set button = ActiveSheet.Buttons.Add(st.Left, st.Top, st.Width, st.Height) 

    With button 
     .OnAction = "GoToIssue.GoToIssue" 
     .Caption = "Go To Source" 
     .Name = "Button" & sauce 
    End With 
    Next sauce 
    Application.ScreenUpdating = True 
End Sub 

Và đây là khối mà trả về ID dãy nút một lần khi được nhấp vào:

Sub GoToIssue() 

    Dim b As Object 
    Dim myrow As Integer 

    Dim hunt As String 

    Set b = ActiveSheet.Buttons(Application.Caller) 
    With b.TopLeftCell 
     myrow = .Row 

    End With 


    hunt = Worksheets("Dummy").Range("F" & myrow).Value 

    'MsgBox hunt 

End Sub 

thời gian của bạn và giúp được đánh giá cao.

+0

Bạn đã thử 'BottomRightCell'? Có vẻ như tất cả phụ thuộc vào kích thước của nút và cách nó mở rộng. Tôi đã thực hiện một loạt các thử nghiệm và có vẻ như 'BottomRightCell' là đáng tin cậy hơn trong việc hiển thị các ô 'Có thể nhìn thấy'. –

Trả lời

2

Bạn có thể sử dụng chức năng này:

Public Function FindButtonRow(btn As Object) As Long 
    Dim cell As Excel.Range 
    '------------------------------------------------- 

    Set cell = btn.TopLeftCell 

    Do While cell.EntireRow.Hidden 
     Set cell = cell.Offset(1, 0) 
    Loop 

    FindButtonRow = cell.row 

End Function 

nó sẽ kiểm tra nếu các tế bào được trả về bởi TopLeftCell phương pháp không có trong hàng ẩn. Nếu có, hàm sẽ thử ô bên dưới và cứ như vậy, miễn là nó tìm thấy ô từ hàng không được ẩn.


Bạn có thể sử dụng nó trong chương trình con của bạn GoToIssue giống như rằng:

Sub GoToIssue() 

    Dim b As Object 
    Dim myrow As Integer 

    Dim hunt As String 

    Set b = ActiveSheet.Buttons(Application.Caller) 
    myrow = FindButtonRow(b) 

    hunt = Worksheets("Dummy").Range("F" & myrow).Value 

    'MsgBox hunt 

End Sub 
+0

Hoạt động như một sự quyến rũ! Cảm ơn bạn – Amostafa

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