読者です 読者をやめる 読者になる 読者になる

PowerPoint プレゼンテーションにプログレスバーを表示するマクロを改良した

プレゼンでもなんでもそうだけど、先が見えてないと飽きるよね。ということでスライドの下に進捗を表すプログレスバーを付けたい。
そんなことを考える人はごまんといて、その中でも有閑階級な人たちが既にマクロを作っている。
http://en.kioskea.net/faq/937-insert-a-progress-bar-to-powerpoint-presentation
でも古い。PowerPoint 2011 では変な色になる。
そして zero origin でない。プログレスバーが zero origin でなくて許せるのか。
という不満があったので、まことに簡単ではあるが改良した。

Sub AddProgressBar()
    On Error Resume Next
        With ActivePresentation
              For X = 1 To .Slides.Count
              .Slides(X).Shapes("PB").Delete
              Set s = .Slides(X).Shapes.AddShape(msoShapeRectangle, _
              0, .PageSetup.SlideHeight - 12, _
              (X - 1) * .PageSetup.SlideWidth / (.Slides.Count - 1), 12)
              s.Name = "PB"
              Next X:
        End With
End Sub

まぁ何をやっているかは自明だと思う。四角形をスライドの下に描いているだけ。VBA なんて触ったこともないけど簡単に改良できた。
むしろ問題になるのはこのスクリプトの使い方で、前述のページにあるように 'ツール > マクロ > Visual Basic Editor' でエディタ画面に。'挿入 > 標準モジュール' で新しいモジュールを入力できる画面に。上のコードをコピペして、'実行 > Sub/ユーザー フォームの実行' でおk。
ちなみに .pptx ではマクロは保存されないので注意。たぶん .pptm とかだと保存される。まぁプレゼンが完成したら毎回入力しても罰は当たらないでしょう。 .ppa とか .ppam とかで保存してマクロをアドインとして配布することもできそうだが、この程度のマクロに1アドインというのもアレなのでやめておく。
あと、プログレスバーを全部消したいという人がいるかも知れない。そのときはこうすればいいのではないですかね(私は使ったことがないので適当に言ってます)。

Sub DeleteProgressBar()
    On Error Resume Next
        With ActivePresentation
              For X = 1 To .Slides.Count
              .Slides(X).Shapes("PB").Delete
              Next X:
        End With
End Sub