Làm quen với Ribbon (3 người xem)

  • Thread starter Thread starter viehoai
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

Text hiện hành trong editBox thì bạn "ghi nhớ" ở trong currText. Chỉ có 2 khả năng: hoặc bạn nhập vào editBox bằng code bằng cách gọi DoText, hoặc người dùng gõ / dán từ bộ nhớ (Ctrl+V). Người dùng gõ / dán thì bạn có EditBoxTextChanged.

Vậy thì thay

Mã:
Sub EditBoxTextChanged(control As IRibbonControl, text As String)
    MsgBox text
End Sub

bằng

Mã:
Sub EditBoxTextChanged(control As IRibbonControl, text As String)
    currText = text
End Sub

Và ở thời điểm bất kỳ thì đọc ở currText ra thôi. Tôi cố tình đặt biến là currText = current text, tức văn bản hiện hành mà

Dạ em cũng có nghĩ đến cách này, nhưng thấy hạn chế ở chỗ là nếu như trong quá trình chạy code mà phát sinh lỗi thì mấy cái biến toàn cục rbcurrText nó cũng bị xoá mất luôn, nên đôi lúc gọi rb.InvalidateControl thì nó báo lỗi không tìm thấy object và currText nó cũng thành chuỗi rỗng trong khi EditBox vẫn có nội dung.
 
Lần chỉnh sửa cuối:
Dạ em cũng có nghĩ đến cách này, nhưng thấy hạn chế ở chỗ là nếu như trong quá trình chạy code mà phát sinh lỗi thì mấy cái biến toàn cục rbcurrText nó cũng bị xoá mất luôn, nên đôi lúc gọi rb.InvalidateControl thì nó báo lỗi không tìm thấy object và currText nó cũng thành chuỗi rỗng trong khi EditBox vẫn có nội dung.

Bạn lo xa cũng đúng thôi.
Text có thể ghi vào nhiều chỗ để khi có sự cố thì đọc ra. Ghi vào đâu thì tùy bạn "láu cá" đến đâu. Có thể

tạo name với giá trị là currText. Khi cần thì đọc từ name ra
Ví dụ:

Mã:
Sub RibbonLoad(ribbon As IRibbonUI)
    ...
    currText = Chr(32)
    ThisWorkbook.Names.Add Name:="editBoxText", RefersTo:=currText
End Sub

Sub EditBoxTextChanged(control As IRibbonControl, text As String)
    currText = text
    ThisWorkbook.Names("editBoxText").RefersTo = currText
End Sub

Sub GetEditBoxText(control As IRibbonControl, ByRef returnedVal)
    returnedVal = currText
    ThisWorkbook.Names("editBoxText").RefersTo = currText
End Sub

Sub Button1_Click()
'   doc Text trong editBox
    MsgBox Replace(Replace(ThisWorkbook.Names("editBoxText").RefersTo, "=", ""), Chr(34), "")
End Sub
----------
Tất nhiên khi mà pointer đã "bị mất" thì để tiếp tục làm việc - vd. gọi rb.InvalidateControl ("editBox1")

trong DoText - thì vẫn phải phục hồi pointer. Tức ở thời điểm "Chào buổi sáng" ta tạo name vd.

"RibbonPoiter" và cho RefersTo = pointer của rb. Khi ta mất pointer thì phục hồi lại từ RefersTo.
 
Thầy siwtom và anh chị GPE cho em hỏi thêm.
Có cách nào tạo ra kiểu ribbon như hình mẫu trên không ạ.

Hình 1: Một box gần giống như gallerry gồm 3 spinbutton để chọn các image trong danh sách. Cái này em không biết tên gọi của controls này là cái gì để lên google search cho đúng.
1.png

Hình 2: Khi click vào button bên dưới thì cái gallery xổ xuống thì như hình dưới. (Cái này em làm được)
2.jpg



Cảm ơn thầy và anh chị trên diễn đàn rất nhiều.

Mong nhận được hồi đáp từ mọi người.
 
Em vừa tìm ra controls đó tên In-RibbonGallery
Tuy nhiên em tìm trên mạng thì không thấy thông tin nào dùng để tạo controls này trên môi trường VBA cả.
Trên VSTO thì có.
Nhờ thầy và anh chị trong diễn đàn tìm được thông tin về cotrols này thì cho em một ví dụ được không ạ.

Cảm ơn mọi người.
 

File đính kèm

  • 1.png
    1.png
    7.6 KB · Đọc: 22
Lần chỉnh sửa cuối:
File Test mình thay đổi arrItem chỗ này
Mã:
Sub RibbonLoad(rb As IRibbonUI)    Set ribbon = rb
    arrItem = WorksheetFunction.Transpose(Range(Sheets("SOY").Range("c11"), Sheets("SOY").Range("c65000").End(xlUp)))
End Sub
Thì đoạn này báo lỗi
Mã:
Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef itemLabel)    
itemLabel = arrItem(index)
End Sub

Xin thầy cô & ace giúp đỡ
 
Web KT

Bài viết mới nhất

Back
Top Bottom