今回はリボンのカスタマイズについて書きます。
どうしても時間を計測する機能が欲しかったので、ストップウォッチ風のリボンのボタンを作ったので、紹介します。
残念ながら時間を随時カウントアップはしません。でも、100分の1秒まで一応測れます。
参考にさせて頂いたサイトは次のサイトさんです。ありがとうございます。
見た目は下の感じ。
Startボタンを押すとボタンの表示がStopになります。
Stopボタンを押すと上の時間が更新されます。
リセットを押すと上の時間が0になります。
それでは早速コードを説明します。
(PowerPoint2010で動作確認しています)
ストップウォッチ風のリボンのcustom.xml
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="onLoad">
<ribbon startFromScratch="false">
<tabs>
<tab id="StopWatchTab" label="ストップウォッチ" >
<group id="StopWatchGroup" label="ストップウォッチ">
<labelControl id="Label1" getLabel="GetCounterLabel"></labelControl>
<button id="StartStopButton" getLabel="ChangeName" supertip="スタート/ストップします" size="normal" onAction="Start_Stop" />
<button id="ResetButton" label=" Reset " supertip="リセットします" getEnabled="ButtonEnabled" size="normal" onAction="Reset" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
onLoadで初期状態を決める関数を定義します。
Start/Stopボタンの表示はgetLabelで宣言した関数により動的に変更することができます。
Startを押した後、時間を測っている間はResetボタンが使用不可になります。ボンタの状態はgetEnabledで宣言した関数によります。
続いてVBAのコードになります。
ストップウォッチ風のリボンのVBA
Option Explicit
Private myRibbon As IRibbonUI ' リボン
Private Start As Single
Private ElapsedNum As Single '
Private ElapsedStr As String
Private Button As Boolean
Sub onLoad(ribbon As IRibbonUI) ' リボンの初期処理
Button = True
ElapsedStr = "0min00.00sec"
Set myRibbon = ribbon ' リボンの表示を更新できるようにするためにリボンをセットする
myRibbon.Invalidate ' リボンの表示を更新する
End Sub
Sub GetCounterLabel(control As IRibbonControl, ByRef returnedVal)
'経過時間の表示変更
returnedVal = ElapsedStr
End Sub
Sub Start_Stop(control As IRibbonControl) 'Start/Stopボタンの動作
If Button = True Then
'ボタンがStartの場合
Start = Timer
If Not ElapsedNum = 0 Then ElapsedNum = (Timer - Start) + ElapsedNum
Button = False 'ボタンの表示をStopに変更する
Else
'ボタンがStopの場合
ElapsedNum = (Timer - Start) + ElapsedNum
ElapsedStr = ElapsedNum \ 60 & "min" & Format$(Round(ElapsedNum - (ElapsedNum \ 60) * 60, 2), "00.00") & "sec"
Button = True 'ボタンの表示をStartに変更する
End If
myRibbon.Invalidate ' リボンの表示を更新する
End Sub
Sub ChangeName(control As IRibbonControl, ByRef label) 'Start/Stopの表示
If Button = True Then
label = " Start "
Else
label = " Stop "
End If
End Sub
Sub ButtonEnabled(control As IRibbonControl, ByRef enabled) 'ResetボタンのON/OFF
'Startボタンが押されるとResetボタンを使用不可にする
enabled = Button
End Sub
Sub Reset(control As IRibbonControl)
'時間の表記と経過時間をリセットする
ElapsedStr = "0min00.00sec"
ElapsedNum = 0
myRibbon.Invalidate
End Sub
見にくい。。。
でもコードをVBAに貼り付けてもらえれば、見やすくなると思います。
custom.xmlで宣言した関数名とVBAでの関数名を間違えないようにご注意ください。
ある程度コメントを入れましたが、わからない場合はコメント頂ければと思います。
こんなしっかりとしたコードをあげるのは初めてなのでちょっと緊張します。
ちょっとした時間を測る際に是非使ってみて下さい。
では、今回はこれで終わりです。ありがとうございました。