仕様
前回は指定したシェイプ、範囲指定した文字のフォントサイズを変更する関数を作りました(前回の記事)。今回はアクティブスライド内全てのフォントサイズを変更します。
仕様はコンボボックスのフォントサイズを選択しボタンをクリックすると開いているスライドのフォントサイズが変わります。以下がコードです。
コード
'-------------------スライド内のフォントサイズを変更------------------------------
Sub changeSlideFontSize()
Dim shp As Shape
Dim gshp As Shape
Dim num As Integer
Dim i As Integer
Dim val As String: val = UserForm1.cmB_fntSz.Value
Dim row As Integer '表行数用変数
Dim col As Integer '表桁数用変数
num = ActiveWindow.Selection.SlideRange.SlideIndex '現在開いているスライド番号を取得
For Each shp In Application.ActivePresentation.Slides(num).Shapes
Select Case shp.Type
Case msoAutoShape, msoCallout, msoPlaceholder, msoTextBox
If shp.HasTextFrame = True Then
With shp.TextFrame.TextRange.Font
.Size = val
End With
End If
Case msoGroup 'グループの時
For Each gshp In shp.GroupItems
If gshp.HasTextFrame Then
With gshp.TextFrame.TextRange.Font
.Size = val
End With
End If
Next
Case msoTable '表の時
With shp.Table
For row = 1 To .Rows.Count
For col = 1 To .Columns.Count
With .Cell(row, col).Shape.TextFrame.TextRange.Font
.Size = val
End With
Next col
Next row
End With
End Select
Next
End Sub
コードの解説をします。まずアクティブスライドのインデックスを取得します。その後そのアクティブスライド内の全てのシェイプを1つずつ読みこむループを作ります。次にシェイプの種類による条件分岐をSelect Caseで行います。
1つ目の条件で文字が入力できる一般的なシェイプのフォントサイズを変更します。
2つ目はグループ化されたシェイプに対してフォントサイズ変更を行います。ポイントはグループの中のシェイプを1つずつ見ていくループを作り、文字が入力できるTextFrameを持っているかどうかの条件をつけることです。文字入力ができない場合は無視されます。
最後の条件は表に対してフォントサイズを変更します。ポイントは行と列を1つずつ見ていく2次元ループを作ることです。エクセルVBAでよく使うループです。
以上がアクティブスライド内のフォントサイズを変更する関数です。続いて以下コードでユーザーフォームのボタンをクリックするとフォントサイズが変更されるようにします。
'省略
'----------ボタンのクリックイベント----------
Private Sub cB_fntSz_Click()
Call Module1.changeSlideFontSize
End Sub
ボタンのクリックイベント関数内で先程作成した関数を呼び出します。
最後に動作確認します。シェイプ、画像、グループ、表をスライド内に並べてフォントサイズを16から30に変更しました。下の画像の様に画像以外はフォントサイズが大きくなりうまく動きました。

次回はプレゼンテーション内全てのフォントサイズを一括で変更します。