2016-03-31 13 views
6

Tôi đang sử dụng đoạn mã XML sau để tạo Ribbon tùy chỉnh cho một bổ trợ Excel.Tự động thay đổi nhãn nút của ribbon Excel

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> 
    <ribbon startFromScratch="false"> 
     <tabs> 
      <tab id="ComdinheiroTab" label="COMDINHEIRO"> 
       <group id="ComdinheiroButtons" label="Comdinheiro"> 

        <button id="Login" getLabel="getLabelLogin" image="Login" size="large" onAction="OnActionLogin"/> 

       </group> 
      </tab> 
     </tabs> 
    </ribbon> 
</customUI> 

Tôi đang sử dụng mã VBA sau để thiết lập một nhãn cho nút đăng nhập:

Sub getLabelLogin(control As IRibbonControl, ByRef returnedVal) 
if loggedIn = true then 
    returnedVal = "Logged" 
else 
    returnedVal = "Disconected" 
end if 
End Sub 

tên của nhãn những thay đổi thành công theo giá trị biến LOGGEDIN khi băng được tải. Tuy nhiên tôi ước tôi có thể thay đổi giá trị của nhãn trong quá trình thực hiện chương trình của tôi. Có thể gọi sự kiện getLabel bằng mã VB không? Có cách nào để làm mới dải băng của tôi để sự kiện này sẽ được gọi lại không?

Trả lời

9

Có, bạn có thể chạy lại "gọi lại" sau. Để làm như vậy, bạn cần phải tạo một biến cấp mô-đun hoặc cấp toàn cầu để giữ đối tượng "giao diện người dùng băng". Đối tượng đó có hai phương thức hữu ích: Invalidate và InvalidateControl. Kích hoạt đầu tiên tất cả gọi lại "get" trong XML Ribbon. Thứ hai kích hoạt callbacks chỉ cho điều khiển được chỉ định.

Ribbon ui của bạn phải được gán cho đối tượng này khi Ribbon tải. Để điều này xảy ra, bạn cần thuộc tính onLoad trong thẻ customUI của XML Ribbon của bạn và gọi lại trong VBA của bạn.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="ribbonLoaded"> 
    <ribbon startFromScratch="false"> 
     <tabs> 
      <tab id="ComdinheiroTab" label="COMDINHEIRO"> 
       <group id="ComdinheiroButtons" label="Comdinheiro"> 

        <button id="Login" getLabel="getLabelLogin" image="Login" size="large" onAction="OnActionLogin"/> 

       </group> 
      </tab> 
     </tabs> 
    </ribbon> 
</customUI> 

Các VBA:

Dim ribbonUI as IRibbonUI 

Sub ribbonLoaded(ribbon as IRibbonUI) 
    Set ribbonUI = ribbon 
End Sub 

Sub UpdateTheLabel 
    ribbonUI.InvalidateControl("Login") 
End Sub 

Sub getLabelLogin(control As IRibbonControl, ByRef returnedVal) 
if loggedIn = true then 
    returnedVal = "Logged" 
else 
    returnedVal = "Disconected" 
end if 
End Sub 

Nó không có vấn đề gì thủ tục gọi InvalidateControl miễn là các thủ tục có quyền truy cập đến đối tượng ribbonUI.

Thông tin thêm về điều này có thể được tìm thấy trong bài viết MSDN https://msdn.microsoft.com/en-us/library/aa338202(v=office.12)#OfficeCustomizingRibbonUIforDevelopers_Dynamically

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