本ページには広告が含まれています。

VBA MultiPage の Page プロパティ値を取得する

VBAでMultiPageのPageプロパティを取得する

UserForm のコピーを作成する方法について勉強を継続しています。前回は、取得したプロパティ値で UserForm を作成してみました。フレームをコンテナとして一つのコントロールを配置しているだけの簡単なものでしたのでうまくいきました。
しかし、その後 MultiPage や複数のコンテナに複数のコントロールを配置している複雑な UserForm で試しましたが、うまく動作しないことがわかりました。
足りないところがまだ沢山あるので少しづつ改善をすすめていきたいと思います。

くるみこ
くるみこ

MultiPage がある等の複雑な UserForm の全プロパティ値を取得方法について、少しづつ改善をすすめていきます。
今回は MultiPage の各 Page のプロパティ値取得方法についてです。

わかりました。よろしくお願いしますm(__)m

前々回の記事「VBAでUserFormの全プロパティを取得する」記事がこちらです。

【この記事でわかることは】
MultiPage の Page プロパティ値を取得する方法

スポンサーリンク

うまく動作できていない部分を整理します

現在わかっている「うまく動作」できていない部分は次のとおりです。

  • MultiPage の Page プロパティが取得できていない
  • Frame や MultiPage などのコンテナ単位でコントロールを整理する
  • コンテナ内にコンテナが配置されているなどのネスト状態への対応

一記事で全部を記述するのは無理なので、複数回を分けて改善していきたいと思います。

MultiPage の Page にアクセスするには

VBAでは、コンテナ内に配置しているコントロールも含めて UserForm.Controls でアクセスできてしまうので逆に切り分けが難しいところです。

コントロールのプロパティ値を一括で取得する場合、MultiPagePage オブジェクトのプロパティ値はそのままでは取得できていないことがわかったので、今回はそれを改善していきます。

MultiPage の Pages コレクション

MultiPage コントロールの Page オブジェクト にアクセスするには、MultiPagePages コレクション から各 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 から始まる点に注意しましょう!

Captionプロパティが取得できました

TEST_02 では For Each page In MultiPage1.Pages のように、For Each ステートメントを試しましたがうまく取得できませんでした。

Captionプロパティが取得できていない
ステップ実行して確認

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 などのコンテナ単位でコントロールを整理する方法を考えていきます。

わたしは、カウントしてループする方がわかりやすいので問題ありません(^^;)

【今回わかったことは】
MultiPage コントロールの Page オブジェクトにアクセスするには、Pages コレクション で Page 数をカウントしてインデックスでアクセスする必要があることがわかりました。

★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★

【今後の記事について】

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてる」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m

【検討中の今後の記事内容は・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思っています・・・・
・今後の記事にご期待ください(^^)/

スポンサーリンク
スポンサーリンク

過去記事のサンプルファイルをダウンロードできます

今回の記事ではサンプルファイルの登録はありません!

過去の記事で使用したサンプルファイルをダウンロードできるようにページを設置していますので、こちら(このリンク先)からご利用ください