カスタム検索
リボン関連

ボタンでアニメーションする

今回はボタンの画像をアニメーションさせる方法を紹介します。

 

1. Office 2007ファイルを開きます(今回はExcelファイル)。
2. 標準モジュールに下記コードを貼り付けて上書き保存した後、ファイルを閉じます。

Private myRibbon As IRibbonUI
Private myFlag As Boolean
Private myNum As Integer
Private Const COUNT_IMAGE As Integer = 4    'イメージ数

Sub Ribbon_onLoad(ribbon As IRibbonUI)
  Set myRibbon = ribbon
  myNum = 1
End Sub

Sub myButton_getImage(control As IRibbonControl, ByRef image)
  Set image = LoadPicture(ThisWorkbook.Path & "\img\img" & myNum & ".BMP")
End Sub

Sub myButton_onAction(control As IRibbonControl)
  Call ChangeFlag
  Call PlayAnimation
End Sub

Sub ChangeFlag()
'フラグ変更用プロシージャ
  myFlag = Not myFlag
End Sub

Sub PlayAnimation()
'アニメーション再生用プロシージャ
  If myFlag = True Then
    If myNum >= COUNT_IMAGE Then myNum = 0
    myNum = myNum + 1
    Call myRibbon.InvalidateControl("myButton")
    Application.OnTime [Now() + "0:00:00.1"], "PlayAnimation"
  End If
End Sub
※ 上記コード内「COUNT_IMAGE」はアニメーション用の画像数です。今回は4つの画像をアニメーションさせてみます。

3. 2.のファイルと同じ場所に「img」フォルダを作成し、その中に連続した画像(今回はimg1~img4.BMPファイル)を置きます。
4. Custom UI Editor Toolで2.のファイルを開きます。
5. 下記コードを貼り付け、上書き保存します。
<customUI onLoad="Ribbon_onLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon startFromScratch="false">
    <tabs>
      <tab id="customTab" label="Custom Tab" insertBeforeMso="TabHome">
        <group id="customGroup" label="Custom Group">
          <button id="myButton" label="My Button" getImage="myButton_getImage" size="large" onAction="myButton_onAction" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
6. 5.のファイルをマクロを有効にして開くと、Custom Tabタブに「My Button」ボタンが表示されていることが確認できます。

7.My Button」ボタンをクリックすると、ボタンの画像がアニメーションします。

以上で作業は終了です。
上記コードでは「getImage」属性で画像を指定し、InvalidateControlメソッドで画像の変更を反映させる動作を、Application.OnTimeで連続して呼び出しています。
Application.OnTimeのタイミングにもよりますが、アニメーション動作中は通常操作が重くなってしまいますので、正直実用性はあまりありません。