仕様
前回はコンボボックスの値が変わると発生するイベントに着いて記載しました(前回の記事)。今回はフォントサイズを変更する範囲に関する機能を実装していきます。
仕様は、範囲指定した文字、もしくは選択したシェイプ(図形)内の文字のフォントサイズを変更します。画像などの図の場合と、矢印のような文字が入力できないシェイプはエラーを表示させます。また表、グループ化されたシェイプは全ての文字を変更します。以下がコードです。
コード
'-------------------指定範囲のフォントサイズを変更------------------------------
Sub rangeFontSize()
Dim val As String: val = UserForm1.cmB_fntSz.Value
Dim row As Integer
Dim col As Integer
Dim gshp As Shape
With ActiveWindow.Selection
If .Type >= ppSelectionText Then '範囲指定
With .TextRange.Font
.Size = val
End With
ElseIf .Type >= ppSelectionShapes Then '図形選択
If .ShapeRange.Type = msoTable Then
With .ShapeRange.Table '表のフォントサイズ変更
For row = 1 To .Rows.Count
For col = 1 To .Columns.Count
.Cell(row, col).Shape.TextFrame.TextRange.Font.Size = val
Next col
Next row
End With
Exit Sub
ElseIf .ShapeRange.Type = msoPicture Then
MsgBox "図です。"
Exit Sub
Else
If .ShapeRange.HasTextFrame Then
With .ShapeRange.TextFrame.TextRange.Font
.Size = val
End With
Else
If .ShapeRange.Type = msoGroup Then 'グループの時
For Each gshp In .ShapeRange.GroupItems
If gshp.HasTextFrame Then
With .ShapeRange.TextFrame.TextRange.Font
.Size = val
End With
End If
Next
Else
MsgBox "テキストフレームを持っていません"
End If
End If
End If
Else
MsgBox "変更箇所を指定してください"
End If
End With
End Sub
コードの内容を解説します。まずは変数の宣言です。ここで重要なのはコンボボックスのテキスト、つまりフォントサイズを変数に格納することです。そうすれば今回作る関数が動いた時必ずフォームで設定したフォントサイズが変数に格納されます。
続いてlf文ですが、沢山Ifがあって複雑そうにみえます。If文の中にIf文があったりもします。こういう時は落ち着いて1つずつ考えることが重要です。まずはActiveWindow.Selectionで選択箇所を指定し.Typeで選択しているものが何かを判定します。大きく分けて3つ判定します。1つ目は選択されたテキスト、2つ目はシェイプ(図形)、3つ目はそれ以外です。
1つ目は文字をドラッグなどで範囲指定した部分のフォントを変更します。
2つ目はシェイプを対象としますが、シェイプと言っても色々な種類があります。このような場合はシェイプ判定の中で更に条件文を追加します。今回はテーブル、図、それ以外を条件文で判定します。
テーブルの場合は行と列の2次元ループで一つずつフォントを変更していきます。
図の場合は文字が無いので、メッセージを表示させます。
それ以外の場合は更に条件分けします。まずはテキストフレームの有無を判定します。テキストフレームがある場合、つまり四角など文字が書けるシェイプの時とそれ以外で条件分けします。それ以外の場合は、更にグループ化されたシェイプとそれ以外、つまり矢印など文字がかけない図形に分けられます。
最後の3つ目は選択されたテキスト、シェイプ以外、つまり何も選択されていない場合です。この場合もメッセージを表示させます。この様に条件文は1つずつ整理しながら行うと良いでしょう。
最後にフォントサイズを変更する対象を見つけた時はsizeプロパティに予めフォントサイズを格納した変数を代入します。
全てのコードを書き終えたらユーザーフォームのボタンにクリックイベントを起こして作成したフォントサイズを変更する関数を呼び出します。これでボタンを押すと動作します。
'省略
'----------ボタンのクリックイベント----------
Private Sub cB_fntSz_Click()
Call Module1.rangeFontSize
End Sub
クリックイベントと関数呼び出しのコードを書いたら実行してみましょう。下記は動作確認の参考例です。

今回は複数の条件文の作り方とフォントサイズを変更するやり方を解説しました。次回はスライド内の変更について記載します。