2019年3月3日日曜日

VBA; 002 テキストボックスの内容を変更する

自分用メモ。
マクロのフォームではなく、挿入→テキストボックスで入れたものの内容を変更する方法。

画像挿入で貼り付けた地図に番号を振って、あとでシャッフルするときなどに使用。

前準備として、テキストボックスの名前を連番にしておく。
ページレイアウト→配置→オブジェクトの選択と表示をクリックして、オブジェクトの一覧を表示。ここで名前を変更して、連番にする。
同じ名前も存在できるので、ユニークな情報ではなさそうだけど、とりあえず動くからこれ以上は調べない。


以下の例では0パディングしてない名前を前提にしているので、0パディングした場合はformat関数あたりを使って調整。
tbox_0 - tbox_19 まで20個のテキストボックスに、⑳ - ①までの丸数字(機種依存文字)を逆順に設定。
ちなみに21以降は文字コードが違うようで、いろいろ試したけどうまく振れなかったので今回は断念。
あと、テキストボックスの他、吹き出しを混ぜても問題なく動作した。


Option Explicit

Const HEADER_NAME = "tbox_"
Const MAX_NUM = 19

Private Sub setTboxesNumber()
    Dim i As Integer
    Dim box_name As String
    
    For i = 0 To MAX_NUM
        box_name = Trim(HEADER_NAME & Trim(str(i)))
        ActiveSheet.Shapes.Range(box_name).TextFrame.Characters.Text = Chr(Asc("⑳") - i)
    Next
End Sub

実行前実行後
しかしBASICだから当然なんだろうけど、for文が最後の数字までカウントされるの、cに慣れると気持ち悪いな。
ループカウンタを1から始めればMAX_NUMを20にできるんだけど、それはそれで0番目の要素が飛ばされるから気持ち悪い。

0 件のコメント:

コメントを投稿