「Insert a progress bar to powerpoint presentation」という記事で、PowerPointにプログレスバーを作成するVBA(Visual Basic for Applications)マクロが紹介されています。
個々のスライドに、プレゼンテーションの進行度合いを表すプログレスバーを作成してくれるマクロです。
便利なマクロなのですが、少し改良したいと感じる部分もあります。
一つは、プログレスバーの背景色です。
プログレスバーと同系色の薄い色が背景色として設定されているほうが、よりプログレスバーらしく感じられるのではないかと思いました。
もう一つは、プログレスバーの色や高さなどの指定箇所です。
コードの中でプログレスバーの色や高さが直接指定されていますが、定数を定義してプロシージャの上のほうで変更しやすくしておきたいと感じました。
基本的考え方は元のマクロと同じですが、いくつか手をいれたマクロをご紹介しておきます。
Sub プログレスバーを作成する()
Const r As String = "00" '色・RGB値のR
Const g As String = "99" '色・RGB値のG
Const b As String = "00" '色・RGB値のB
Const pbH As Long = 20 '高さ
Const pbBG As Single = 0.6 '背景の透過性
Dim i As Long
Dim s As Shape
On Error Resume Next
With ActivePresentation
'背景 ProgressBarBG の設定
.SlideMaster.Shapes("ProgressBarBG").Delete
Set s = .SlideMaster.Shapes.AddShape( _
Type:=msoShapeRectangle, _
Left:=0, _
Height:=pbH, _
Top:=.PageSetup.SlideHeight - pbH, _
Width:=.PageSetup.SlideWidth)
With s
.Fill.ForeColor.RGB = _
RGB(CInt("&H" & r), CInt("&H" & g), CInt("&H" & b))
.Fill.Transparency = pbBG
.Line.Visible = msoFalse
.Name = "ProgressBarBG"
End With
'プログレスバー ProgressBar の設定
For i = 1 To .Slides.Count
.Slides(i).Shapes("ProgressBar").Delete
Set s = .Slides(i).Shapes.AddShape( _
Type:=msoShapeRectangle, _
Left:=0, _
Height:=pbH, _
Top:=.PageSetup.SlideHeight - pbH, _
Width:=i * .PageSetup.SlideWidth / .Slides.Count)
With s
.Fill.ForeColor.RGB = _
RGB(CInt("&H" & r), CInt("&H" & g), CInt("&H" & b))
.Line.Visible = msoFalse
.Name = "ProgressBar"
End With
Next i
End With
はじめの3行
Const r As String = "00"
Const g As String = "99"
Const b As String = "00"
で、プログレスバーの色R・G・Bそれぞれの値を「00」から[FF]の16進の値で指定できます。
次の
Const pbH As Long = 20
で、プログレスバーの高さを、次の
Const pbBG As Single = 0.6
で、プログレスバーの背景色の透過性・透過度合いを指定できます。透過性は、数値が「1」に近いほど、透過の度合いが大きく薄い色となります。
With ActivePresentation
.SlideMaster.Shapes("ProgressBarBG").Delete
に続く、
Set s = .SlideMaster.Shapes.AddShape( _
Type:=msoShapeRectangle, _
Left:=0, _
Height:=pbH, _
Top:=.PageSetup.SlideHeight - pbH, _
Width:=.PageSetup.SlideWidth)
With s
.Fill.ForeColor.RGB = _
RGB(CInt("&H" & r), CInt("&H" & g), CInt("&H" & b))
.Fill.Transparency = pbBG
.Line.Visible = msoFalse
.Name = "ProgressBarBG"
End With
の部分が、プログレスバーの背景を作成している箇所です。
Set s = .SlideMaster.Shapes.AddShape( _
Type:=msoShapeRectangle, _
とスライドマスターに四角形のシェイプを挿入するときに、
Left:=0, _
Height:=pbH, _
Top:=.PageSetup.SlideHeight - pbH, _
Width:=.PageSetup.SlideWidth)
場所やサイズを指定しています。
ここで、定数「pbH」を使って高さや上からの位置を指定しています。
つづく
.Fill.ForeColor.RGB = _
RGB(CInt("&H" & r), CInt("&H" & g), CInt("&H" & b))
.Fill.Transparency = pbBG
の部分で、定数「r」「g」「b」を使って色を指定して、定数「pbBG」で透過性を指定しています。
最後に
.Name = "ProgressBarBG"
名前を「ProgressBarBG」と指定しています。
同じ名前のシェイプが存在しているとエラーとなるので、最初に
.SlideMaster.Shapes("ProgressBarBG").Delete
と「ProgressBarBG」を削除しています。
また「ProgressBarBG」という名前のシェイプが存在しないときに「ProgressBarBG」を削除しようとするとエラーとなってしまうので、これを回避するために変数宣言の直後で
On Error Resume Next
としています。
そのあとのFor ~ Next文の中の処理は、個々のスライドにプログレスバーを作成している箇所です。
ここは、先に行ったスライドマスターへのプログレスバーの背景の作成処理と、基本的考え方や流れは同じです。
違うのは個々のスライドに作成するために全体が
For i = 1 To .Slides.Count
とループ処理に入って処理対象が個々のスライドになり、作成するシェイプの名前が「ProgressBar」になっていることと、プログレスバーの色指定後に透過性の指定を行っていないことです。
- Newer:複数のシートからCOUNTIFしたい
- Older:選択されたシートを逆順に並び替えるExcelマクロ
Home » パワーポイントマクロ・PowerPoint VBAの使い方 » マスター » プレゼンの進行度合いを示すプログレスバーを作成するパワポマクロ