2016-03-31 31 views
6

次のXMLコードを使用して、Excelアドイン用のカスタムリボンを作成しています。リボンのボタンラベルを動的に変更する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> 

私は、ボタンのログインのためのラベルを設定するには、次のVBAコードを使用しています:

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

リボンがロードされると、ラベルの名前の変更が成功した変数LOGGEDINの値に応じました。しかし、プログラムの実行中にラベルの値を変更することができたらと思います。 VBコードを使用してgetLabelイベントを呼び出すことは可能ですか?このイベントが再び呼び出されるように、私のリボンをリフレッシュするためにとにかくありますか?

答えて

9

はい、後で "get"コールバックを実行することは可能です。これを行うには、 "リボンUI"オブジェクトを保持するモジュールレベルまたはグローバルレベルの変数を作成する必要があります。そのオブジェクトには2つの便利なメソッドがあります:InvalidateとInvalidateControl。最初のトリガーはすべてリボンXMLの "get"コールバックです。 2番目のメソッドは、指定されたコントロールのコールバックのみをトリガーします。

リボンがロードされるときに、リボンuiをこのオブジェクトに割り当てる必要があります。これを実行するには、リボンXMLのcustomUIタグに属性onLoadが、VBAにコールバックが必要です。

<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> 

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 

限り、手順はribbonUIオブジェクトへのアクセス権を持っているようInvalidateControlを呼ん手順は重要ではありません。

その他の詳細については、MSDNの記事https://msdn.microsoft.com/en-us/library/aa338202(v=office.12)#OfficeCustomizingRibbonUIforDevelopers_Dynamically

関連する問題