【フォントサイズ変更ツール4】変更範囲指定


仕様

 前回はコンボボックスの値が変わると発生するイベントに着いて記載しました(前回の記事)。今回はフォントサイズを変更する範囲に関する機能を実装していきます。
 仕様は、範囲指定した文字、もしくは選択したシェイプ(図形)内の文字のフォントサイズを変更します。画像などの図の場合と、矢印のような文字が入力できないシェイプはエラーを表示させます。また表、グループ化されたシェイプは全ての文字を変更します。以下がコードです。

コード

'-------------------指定範囲のフォントサイズを変更------------------------------
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

 クリックイベントと関数呼び出しのコードを書いたら実行してみましょう。下記は動作確認の参考例です。

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


コメントを残す