[Hỏi] Ribbon dropdown (1 người xem)

Liên hệ QC

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

hoanganhdl

Thành viên hoạt động
Tham gia
10/2/09
Bài viết
135
Được thích
74
Nghề nghiệp
Kế toán viên
Đang nghiên cứu về Ribbon gặp vấn đề nhờ thầy cô & ace giúp đỡ
File test down từ bài "Làm quen với Ribbon" ở box "Hàm & công thức excel", mình có post bài hỏi nhưng chưa có ai trả lời có thể do sai box nên mình post lại ở đây

Mình sửa array ở Ribbon onload

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

nhưng lại bị lỗi ở phần label
Mã:
Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef itemLabel)
    itemLabel = arrItem(index)
End Sub
 

File đính kèm

File test down từ bài "Làm quen với Ribbon" ở box "Hàm & công thức excel"
Nhìn code tôi biết là bạn lấy ví dụ của tôi, vả lại không có ai giúp bạn, vậy tôi trả lời (siwtom đã bị đuổi nên tôi trả lời)
code của tôi là
Mã:
Sub RibbonLoad(rb As IRibbonUI)
    Set ribbon = rb
    arrItem = Array("muc 1", "muc 2", "muc 3", "muc 4", "muc 5")
End Sub
Do dùng hàm Array nên mảng arrItem có chỉ số bắt đầu từ 0.
Bây giờ bạn sửa lại thành
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
nên mảng arrItem có chỉ số tính từ 1. Lúc này khi ribbon gọi
Mã:
Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef itemLabel)
    itemLabel = arrItem(index)
End Sub
với index = 0 (chỉ số trong combobox tính từ 0) thì lỗi itemLabel = arrItem(0) vì làm gì có phần tử có chỉ số 0?
Sửa lại thành
Mã:
Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef itemLabel)
    itemLabel = arrItem(index + 1)
End Sub
----------
Nhưng bạn còn sai một chỗ nữa. Code của tôi là
Mã:
Sub GetItemCount(control As IRibbonControl, ByRef count)
    count = UBound(arrItem) + 1
End Sub
Vì mảng arrItem của tôi có chỉ số tính từ 0 nên số phần tử trong mảng là UBound(arrItem) + 1.
Bạn vẫn để nguyên thế thì khi bạn click để mở combobox thì sẽ có lỗi. Vì sao? Vì khi bạn click thì ribbon sẽ gọi Sub GetItemLabel count lần để lấy count giá trị của count mục của combobox để hiện thị danh sách cho bạn chọn. Trong trường hợp của bạn thì trên sheet có 11 giá trị, vậy mảng arrItem có 11 phần tử với chỉ số 1, 2, ..., 11. Bạn để nguyên code của tôi thì count = UBound(arrItem) + 1 = 12. Do chỉ số trong combobox tính từ 0 nên ribbon sẽ gọi Sub GetItemLabel 12 lần với index = 0, 1, ..., 11. Khi gọi với index = 11 thì
Mã:
itemLabel = arrItem(index + 1)
sẽ có lỗi vì làm gì có arrItem(12)?
Tức sửa chỗ thứ 2 thành
Mã:
Sub GetItemCount(control As IRibbonControl, ByRef count)
    count = UBound(arrItem)
End Sub
Lúc này count = 11 và sau đó ribbon sẽ gọi Sub GetItemLabel 11 lần với index = 0, 1, ..., 10, tức arrItem(index + 1) = arrItem(1), arrItem(2), ..., arrItem(11)
 
Lần chỉnh sửa cuối:
Upvote 0
Cũng đã thử sửa lại như này
Mã:
[COLOR=#000000]Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef itemLabel)[/COLOR]    
itemLabel = arrItem(index + 1) 
[COLOR=#000000]End Sub[/COLOR]
nhưng lại không để ý đoạn
Mã:
[COLOR=#000000]Sub GetItemCount(control As IRibbonControl, ByRef count)[/COLOR]    
count = UBound(arrItem) + 1 
[COLOR=#000000]End Sub[/COLOR]
Cám ơn bác rất nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom