エクセルマクロコントロールボタンのテキスト(キャプション)編集表示不具合と2つの対応策

macrobutton eyecatch エクセル
macrobutton eyecatch

はじめに

 エクセルのマクロコントロールボタンのテキスト(キャプション)を編集する際に、ウインドウ枠が固定されていると編集中にボタンのイメージが更新されず、入力中のテキストが視認できなくなるため編集がしにくくなる問題が発生します。
 この記事では対応策を2つ提案します。

不具合が発生する条件①行のウインドウ枠固定

行のウインドウ枠固定時のイメージ

 ボタンのあるシートが行(横方向)でウインドウ枠固定されている場合、上図のような表示となりテキストの編集状態が視認できなくなります。
 この状態での編集は入力を終えたテキストが確認できないため非常にやりにくさを感じます。

不具合が発生する条件②列のウインドウ枠固定

列のウインドウ枠固定時のイメージ

 ボタンのあるシートが列(縦方向)でウインドウ枠固定されていて、且つボタンがウィンドウ枠の固定の基準となる列をまたがった位置に配置されている場合、上図のような表示となりテキストの編集状態が一部視認できなくなります。

対応策①ウインドウ枠の固定を解除してから編集

 ボタンのテキスト編集が視認できなくなる原因はウインドウ枠の固定にあります。
 マクロコントロールボタンのテキストを目視しながら編集したい場合は、「表示」タブ>「ウィンドウ枠の固定」ドロップダウン>「ウィンドウ枠固定の解除」をクリックで一旦ウインドウ枠の固定を解除してから編集します。

対応策②対策マクロVBAで順に編集

対策マクロVBA実行イメージ

 マクロVBAの知識が必要になりますが、下記対策マクロVBAでシート上のマクロボタンを順に変更する方法があります。
 ボタンの数だけInputboxが順に表示されて、Inputboxに入力されたテキストがマクロボタンのテキスト(キャプション)に置き換わります。
 インプットボックスが前面に表示されますので、テキスト(キャプション)を目視しながら編集することができます。
 ただしインプットボックスには1行のテキストしか入力できないため、複数行に渡るボタンのテキストには修正できませんので、その点をご留意ください。

対策マクロ

Sub ButtonNameChange()

Dim btn As Button
Dim Bcap As String '変更前のキャプション
Dim Acap As String '変更後のキャプション
Dim Flag As Boolean
Dim W, H, T, L As Integer '幅、高さ、トップ位置、左位置
Dim Sq As Shape
Dim dTime As Double

    For Each btn In ActiveSheet.Buttons
    
    Flag = True
    
        With btn
        
        Bcap = .Caption
        
        'コントロールボタンの大きさ、位置のステータスを取得
        L = .Left
        T = .Top
        W = .width
        H = .Height
        
        End With
        
         'コントロールボタンの大きさ、位置でシェイプを作成する
        Set Sq = ActiveSheet.Shapes.AddShape(msoShapeRectangle, L, T, W, H)
        
        With Sq
        
            .line.ForeColor.RGB = RGB(255, 0, 0)
            .line.Weight = 3
            .Fill.Visible = False '塗りつぶしなし
                    
        End With
    
    dTime = Time '画面が更新されないので画面更新のための処理を挿入する
    
        Do While Time < dTime + 1 / 24 / 60 / 60 / 2
        DoEvents
        Loop
        
    Acap = InputBox(Prompt:="ボタンのテキストを入力して下さい", Default:=Bcap)
    
    Sq.Delete 'シェイプを削除
    
        If StrPtr(Acap) = 0 Then  ' キャンセル時に終了
        
        MsgBox "キャンセルします"
        
        Exit Sub
    
        End If
        
        If Bcap <> Acap Then
        
        btn.Caption = Acap
        
        End If
    
    Next btn

    If Flag = False Then

    MsgBox "現在のシートにボタンが存在しません"

    End If

End Sub

その他に試したこと

 テキストを編集する他の方法が無いか?と以下のことを試しました
 結論を言うとフォームコントロールのボタンのテキストを編集することはできなかったので、読み飛ばして頂いて問題ありません。

ボタン選択→右クリック→コントロールの書式設定

 コントロールの書式設定ウインドウを開いて各種タブを覗いてみました。
 唯一望みがありそうな「代替テキスト」(コントロールボタンのテキストと同じテキストが入力された状態になっています)を変更してみてもコントロールボタンのキャプション自体は変更されませんでした。
 恐らく非表示になった際にはここに入力されたテキストがボタンの代わりに表示されるものと考えられます。

「開発」タブ→「プロパティ」

 コントロールボタンを押した状態でプロパティを押せばプロパティウインドウからテキストの編集ができないかと思ったのですが、できませんでした。
 ただし、上記内容はフォームコントロールの場合です。

 ActiveXコントロールのボタンであれば「開発」タブ→「デザインモード」→「プロパティ」の操作で表示されたプロパティウインドウのCaptionの項目を変更することでコントロールボタンのテキストを変更することができました。

 ActiveXコントロールのボタンとフォームコントロールのボタンの違いとして下記が挙げられます。

  • プロパティウインドウに表示される(上記の通りテキスト(キャプション)の編集が可能)
  • 作成時にマクロの登録ウインドウが開かない
  • ボタンを右クリックで表示されるメニューに「マクロの登録」が無い
  • 高度なカスタマイズを行うことができる
  • マクロの登録はVBEのイベントプロシージャ内にマクロ名かマクロのコードを記入して行う

まとめ

 ボタンのテキスト(キャプション)を変更する際に視認できないのは不便ですしストレスを感じます。
 筆者は記事で紹介しているマクロVBAを個人用マクロブックに登録して使用することでストレスを軽減しています。
ただし出番が滅多に無いのが悩みどころです。
 この記事が読者様のお役に立てたならば幸いです。

 エクセル関数を擬人化キャラクターで解説した記事も投稿しています。
 短い記事ですぐに読めますので、宜しければこちらもご覧下さい。

エクセル関数擬人化 MATCH関数

 VBA関連の記事も順次追加していく予定なので、こちらも宜しくお願いします。

エクセルVBA:=(コロンイコール)の覚え方 <=や>=にも応用可能

Microsoftサポート フォームまたはコントロールにマクロを割り当てる

コメント

  1. […] ウインドウ枠固定状態でのマクロボタン編集不具合と対策 […]

  2. […] マクロコントロールボタン ウインドウ枠固定状態での表示不具合と対策 […]

タイトルとURLをコピーしました