作成日 2006/1/28
最終更新日 2006/2/26
5.資料
5-2.VBE上にユーザフォームを表示する
通常、ユーザフォームを表示すると、Excelがアクティブになり、その上に、ユーザフォームが表示されます。
(そもそも、VBAはExcel等Officeをカスタマイズする言語であって、VBEを拡張するための言語ではないから当然だと思う。)
で、今回はそのユーザフォームを無理矢理、VBE上に表示する方法を説明します。
本当に無理矢理です。うまく出来なかったら、忘れてください。
(とか言いつつ、すでにアドインに組み込んでいる、、、。)
ちょっと、面倒です。
Application.Visble = False
で、出来そうだけど、ダメだった。(Excel X for Macで確認)
ユーザフォームを表示する前に、開いているワークブックの全てのウィンドウを非表示にすればいいみたいです。
問題点:
ただ、これだけだと、ユーザフォームが非表示になり、ウィンドウの表示状態を戻したときに、
ワークブックのSavedプロパティがFalseになってしまうので、
ユーザフォームを表示する前の状態に戻した方がいいと思いますが、その場合、
ワークブックの表示状態を元に戻した後、ウィンドウの閉じるボックスの表示が未保存の状態になってしまいました。
(Savedプロパティは元に戻っているんだけど、、、。)
また、マクロで、ワークブックに対して処理を行った場合は、SavedプロパティをFalseにしたくないのですが、、、どうしよう、、、。
簡単。全然、難しくない。
ユーザフォームを表示する前に、エクセルを非表示にすればいい。
具体的には、
Application.Visble = False
を実行すればいい。
問題点:
ユーザフォーム実行中に、マクロorアドインが強制終了したら、エクセルが非表示になったままとなってしまう。
ユーザフォームが開いた後、VBEのウィンドウをクリックすると、ユーザフォームが隠れてしまう。
(ユーザフォームはタスクバーに表示されないので、アクティブにするのが面倒。)
ユーザフォームを開いたときに、[プロジェクト]エクスプローラで選択されているモジュールが変更されます。
(開いたユーザフォームが選択状態となる)
図1 フォームを表示すると選択モジュールが変更される。
ということで、
- 選択モジュール(SelectedVBComponent)やアクティブプロジェクト(ActiveVBProject)への参照な
んかは、
ユーザフォームを表示する前に取得しておく必要があります。
- 表示したユーザフォームが入っているプロジェクトが[プロジェクト]エクスプローラで開かないようにするために、
プロジェクトにプロテクトをかけておいた方がいいと思います。
サンプル
(test_showUserForm.xls)
このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方は
メールをお願いします。
Microsoft 、Windows 、Visual Basic 、Microsoft Office および
Excel
は米国Microsoft
Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple Computer,Inc.の登録商標または商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。