[[20210730075402]] 『VBAにおけるユーザーフォームのオブジェクトの一梶x(ぶいえもん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAにおけるユーザーフォームのオブジェクトの一括書式設定について』(ぶいえもん)

ユーザーフォームを利用してシートのデータの入力補助機能を作成しています。

入力補助の流れは

?@シートのデータをオブジェクトのcontrolsourceプロパティか,ユーザーフォームのイニシャライズで呼び出しユーザーフォームに表示

?Aデータを更新する度(afterupdateで)に日付(1/1とかの入力)を短い和暦表示にする。

?B更新ボタンを押すとテキストボックスのtextプロパティをもとの位置に戻す(この場合は、シート側の書式設定(今回は?Aと同様の書式設定))

で考えています。

この手順の中で、?@?A?Bそれぞれの段階で、常に短い和暦表示になるよう、できるだけシンプルな文で記述したいと考えています。

いろいろ調べた中で、テキストオブジェクトの【Tagプロパティ】というものを知ったので、同じ書式を適用したいオブジェクトに、同じ名前のTagプロパティをつけて、一括で変更を書けることがかけることができるのではないかと思って調べているのですがうまくいきません。

Tagプロパティを使った一括書式設定

または、

他の方法等あればご教示いただけると幸いです。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 おはようございます。。。^^
 Controls
を使えば、全Textboxでも、ループで処理出来たように思いましたが
その様な事ではないので?

 元、隠居じーさん
(隠居Z) 2021/07/30(金) 08:55

返信ありがとうございます。

controls でのループ処理自体は、できると認識しているのですが

テキストボックスのオブジェクト名を指定しないといけないと認識しておりまして

その方法であれば実装できるのですが、

すべての同一のtagプロパティを、もってるすべてのオブジェクトに

if ○○.tag =△ then

 □□.text = format(□□.text,"ge,m,d")

end if

のような短い文で処理できないものかと考えてまして

変数□□に、対象のオブジェクトを全部入れ込む配列にして、

Foreachとかするかんじが現実的?なのか、

いまいちシンプルかつ効率的な文か浮かばなくてみなさまのアイデアをちょうだいしたいとかんがえて投稿したところです

一括処理できないものかな?
(ぶいえもん) 2021/07/30(金) 09:06


 こんな感じ?
    Dim c As MSForms.Control
    For Each c In Me.Controls
        If TypeOf c Is MSForms.TextBox Then Debug.Print c.Text
    Next

(白茶) 2021/07/30(金) 09:13


白茶さんありがとうございます

As 〇〇で、すべてのコントロールを入れ込めるんですね!

勉強になります!そこからfor each で、条件に当てはまる書式設定が変えられるかやってみます!
(ぶいえもん) 2021/07/30(金) 11:13


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.