UserForm のコピーを作成する方法について勉強しましたが
手動で全く同じユーザーフォームを作成するには各コントロールの大きさや配置などを全く同じにしなければなりません。手動でそのデータを取得・設定するのは結構な手間がかかることがわかりました。
VBAを使って一括でコントロール値を取得できないかどうか検討してみたいと思います。

UserForm自体の各プロパティー値と配置している各コントロールの値まですべて取得するようにできれば、そのデータを使って設定することもできそうですね(^^)
まずは、取得する方法を考えていきましょう、

わかりました。よろしくお願いしますm(__)m
前回記事の「UserForm のコピーを作成する方法」がこちらです。
【この記事でわかることは】
・UserForm の全プロパティをVBAで取得する方法
・各コントロールの全プロパティーをVBAで取得する方法
UserForm と配置コントロールの全プロパティ値をVBAで取得する
前回同様この UserForm を使ってテストしていきます。

UserForm1 には Frame1、Label1、Label2、CommandButton1 が配置されています。
UserForm1 のプロパティ
UserForm
(オブジェクト名)
BackColor
BorderColor
BorderStyle
Caption
Cycle
DrawBuffer
Enabled
Font
ForeColor
Height
HelpConTextID
KeepScrollbarsVisible
Left
MouseIcon
MousePointe
Picture
pictureAlignment
PictureSizeMode
PictureTiling
RightToLeft
ScrollBars
ScrollHeight
ScrollLeft
ScrollTop
ScrollWidth
ShowModal
SpecialEffect
StartUpPosition
Tag
WhatThisButton
WhatThisHelp
Width
Zoom
合計33種類あります
文字を青色にしている「Font」はオブジェクトで、次のプロパティがあります。
Font.Name、 Font.Size、Font.Bold、Font.Italic、Font.Strikethrough、Font.Underline
「Font」には「Font.Color」などもっとたくさんのプロパティがあるのですが、UserForm で使われているのはこれらのようです。
これも種類にプラスすると 38種類(オブジェクトを除いて)ということです。
コントロールのプロパティ
基本となる取得すべきコントロール等のプロパティをピックアップしました。
コントロールの種類
検証したコントロールの種類がこちらです。
UserFormを含めて18種類(基本コントロール15種類+ActiveXのコントロール2種類)です。
UserForm | Label | CommandButton | ToggleButton | Frame | TabStrip | MultiPage | CheckBox | OptionButton | RefEdit | TextBox | ComboBox | ListBox | ScrollBar | SpinButton | Image | ListView | ProgressBar |
コントロールの全プロパティ
各コントロールのプロパティを全てリストアップした種類は次の 122種類 ありました。
Accelerator | Alignment | AllowColumnReorder | Appearance | Arrenge | AutoSize | AutoTab | AutoWordSelect | BackColor | BackStyle | BorderColor | BorderStyle | BoundColumn | Cancel | Caption | Checkboxes | ColumnCount | ColumnHeads | ColumnWidths | ControlSource | ControlTipText | Cycle | Default | Delay | DragBehavior | DrawBuffer | DropButtonStyle | Enabled | EnterFieldBehavior | EnterKeyBehavior | FlatScrollBar | Font | FontSize | FontBold | FontItalic | FontStrikethrough | FontUnderline | ForeColor | FullRowSlect | GridLines | GroupName | Height | HelpConTextID | HideColumnHeaders | HideSelection | HotTracking | HoverSelection | IMEMode | IntegralHeight | KeepScrollbarsVisible | LabelEdit | LabelWrap | LargeChange | Left | ListRows | ListStyle | ListWidth | Locked | MatchEntry | MatchRequired | Max | MaxLength | Min | MouseIcon | MousePointer | MultiLine | MultiRow | MultiSelect | OLEDragMode | OLEDropMode | Orientation | PasswordChar | Picture | pictureAlignment | PicturePosition | PictureSizeMode | PictureTiling | ProportionalThumb | RightToLeft | RowSource | ScrollBars | ScrollHeight | Scrolling | ScrollLeft | ScrollTop | ScrollWidth | SelectionMargin | SelLength | SelStart | SelText | ShowDropButtonWhen | ShowModal | SmallChange | Sorted | SortKey | SortOder | SpecialEffect | StartUpPosition | Style | TabFixedHeight | TabFixedWidth | TabIndex | TabKeyBehavior | TabOrientationTop | TabStop | Tag | TakeFocusOnClick | Text | TextAlign | TextBackground | TextColumn | Top | TopIndex | TriPleState | Value | View | Visible | WhatThisButton | WhatThisHelp | Width | WordWrap | Zoom |
※ 各プロパティの説明は省略しています。
取得方法と書き出し方法を検討
VBAのコード内にひとつづつ書いていくとすごく長くなってしまいます。
そこで、「Control」からプロパティ名を取得できないか調べてみたのですがダメでした。
いろいろ調べところ(Accessではできるようですが)Excel の VBAでは Control のメンバーに プロパティが設定されていないので無理なのです。
そこで仕方なく、あらかじめプロパティー名をシートに書き出しておいて、それを使って取得する方法を検討します。

取得できたデータは一旦配列に代入保持しておき、すべて取得できた後シートに書き出す方法にしたいと思います。
では、設定していきましょう。
UserForm の全プロパティ値を取得するコード
コントロール値を取得する部分は、処理をFunctionモジュールにして分けています。
動作確認してみました
VBAコード実行後のプロパティデータが書き込まれたシート(一部)が下の画像です。

うまく取得できていますね(^^)
10行目の FontSize のところが金額表示となっていますが(^^;
取得データの入っていないところは、該当するプロパティーが無いか取得出来ない部分です。
まとめ(おわりに)
以上、UserForm とそこに配置している全コントロールの全プロパティー値をVBAで取得する方法の解説でした。
まとめと感想など

コントロールのプロパティー名が取得できればスッキリとしたもっと短いコードになるんですが残念ですね。それでも何とか値を取得できるようになったので、今度はその値をVBAで設定する方法を考えていきましょう。

コントロールの種類によって、プロパティーの種類が全然違うので大変でしたね。結局、全部の種類をあたるようにしたのは仕方ないですね。次にどのように設定するのか楽しみです(^^)
★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★
【今後の記事について】
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてる」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m
【検討中の今後の記事内容は・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思っています・・・・
・今後の記事にご期待ください(^^)/
過去記事のサンプルファイルをダウンロードできます
リンク先に今回記事のサンプルファイルを登録しています!
過去の記事で使用したサンプルファイルをダウンロードできるようにページを設置していますので、こちら(このリンク先)からご利用ください
設定したコードでは、自ブックの UserForm の設定を取得することになります。
UserForm が複数あった場合の処理を入れていませんので、取得データは書き込み先に上書きしてしまいます。(2個目以降は別シートに書き込むなどの変更が必要です)
対象を「ブックを指定して取得する」や「開いているブックすべて」などに変更して、自ブック以外の設定を取得するように変更して活用できます。