UserForm のコピーを作成する方法について勉強を継続しています。前回は、取得したプロパティ値で UserForm を作成してみました。フレームをコンテナとして一つのコントロールを配置しているだけの簡単なものでしたのでうまくいきました。
しかし、その後 MultiPage や複数のコンテナに複数のコントロールを配置している複雑な UserForm で試しましたが、うまく動作しないことがわかりました。
足りないところがまだ沢山あるので少しづつ改善をすすめていきたいと思います。
MultiPage がある等の複雑な UserForm の全プロパティ値を取得方法について、少しづつ改善をすすめていきます。
今回は MultiPage の各 Page のプロパティ値取得方法についてです。
わかりました。よろしくお願いしますm(__)m
前々回の記事「VBAでUserFormの全プロパティを取得する」記事がこちらです。
【この記事でわかることは】
・MultiPage の Page プロパティ値を取得する方法
うまく動作できていない部分を整理します
現在わかっている「うまく動作」できていない部分は次のとおりです。
一記事で全部を記述するのは無理なので、複数回を分けて改善していきたいと思います。
MultiPage の Page にアクセスするには
VBAでは、コンテナ内に配置しているコントロールも含めて UserForm.Controls でアクセスできてしまうので逆に切り分けが難しいところです。
コントロールのプロパティ値を一括で取得する場合、MultiPage の Page オブジェクトのプロパティ値はそのままでは取得できていないことがわかったので、今回はそれを改善していきます。
MultiPage の Pages コレクション
MultiPage コントロールの Page オブジェクト にアクセスするには、MultiPage の Pages コレクション から各 Page ごとにアクセスしていく必要があります。
次の二つのコードでページの名前(Caption)を取得するテストしてみました。
Sub TEST_01()
Dim i As Long
With fmPW_Make 'UserForm
For i = 0 To .MultiPage1.Pages.Count - 1
MsgBox "Pages(" & i & ").Caption = " & .MultiPage1.Pages(i).Caption
Next
End With
End Sub
'//////////////////////////////////////////////////////////////////////////////////
Sub TEST_02()
Dim page As Control
With fmPW_Make 'UserForm
For Each page In .MultiPage1.Pages
MsgBox "page.Name = " & .MultiPage1.page.Caption
Next
End With
End Sub
TEST_01 のページ数をカウントしてインデックスでアクセスする方法はうまく取得できました。
Count は 0 から始まる点に注意しましょう!
TEST_02 では For Each page In MultiPage1.Pages のように、For Each ステートメントを試しましたがうまく取得できませんでした。
page.Name でオブジェクト名は取得できています。
page.Caption では値が取得できていません。
Pageオブジェクトからは取得できないということでしょうか?
試しに page.Height で実行したらこれは取得できました。
Webでいろいろ調べてみたのですが、Caption を取得できている方法は「TEST_01」しか見つけられなかったので、前々回のコードに「TEST_01」の方法を組み入れていくようにしたいと思います。
まとめ(おわりに)
以上、UserForm に設置した MultiPage の Page プロパティ値を取得する方法の解説でした。
まとめと感想など
For Each page In MultiPage1.Pages をなんとか使えないかいろいろ試しましたがうまくいきませんでしたけど、MultiPage の各 Page のプロパティ値取得方法がわかりましたね。
次回は、Frame や MultiPage などのコンテナ単位でコントロールを整理する方法を考えていきます。
わたしは、カウントしてループする方がわかりやすいので問題ありません(^^;)
★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★
【今後の記事について】
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてる」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m
【検討中の今後の記事内容は・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思っています・・・・
・今後の記事にご期待ください(^^)/
過去記事のサンプルファイルをダウンロードできます
今回の記事ではサンプルファイルの登録はありません!
過去の記事で使用したサンプルファイルをダウンロードできるようにページを設置していますので、こちら(このリンク先)からご利用ください
【今回わかったことは】
MultiPage コントロールの Page オブジェクトにアクセスするには、Pages コレクション で Page 数をカウントしてインデックスでアクセスする必要があることがわかりました。