業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、フォームの作り方とタイトルの付け方、モードレス表示にするShowメソッドのvbModeless、フォームを閉じるUnloadメソッド、フォームを隠すHideメソッドの使い方などを解説。
今回からフォームに関するTipsを数回に分けて解説していく。フォームに関しては、コントロールの使い方の解説がメインになるため、日常業務のどんな場面で利用できるかについては、あまり触れていない。
その代わり「このコントロールを使用すれば、このようなことができる」という使い方の解説を行うので、「どのような場面でこのコントロールを使えば、業務の効率化が図れるか」は、各読者の皆さんに考えていただきたい。
初めは「フォームの作り方とフォームのタイトルの付け方」について解説する。
まず、VBE(Visual Basic Editor)を起動し、VBEのメニューから[挿入]→[ユーザーフォーム]を選択する。すると、図1のようにフォームが表示される。マウスを右隅下に持っていてドラッグすると、フォームのサイズを自在に変更できる。
次に、フォームの「UserForm1」と表示されているタイトルを変更してみよう。
UserForm1のプロパティの中に[Caption]という項目がある。ここに「薬師寺国安事務所フォーム」と指定すると、図2のように「UserForm1」と表示されていた箇所が、「Caption」に指定した名称に変更される。
「背景色」を変更したい場合は、[BackColor]の項目を、フォームに「枠線」を表示したい場合は[BorderStyle]の項目を、「枠線の色」を変更したい場合は[BorderColor]の項目を変更すればいい。筆者の好みで変更したフォームは図3の通りだ。
以上がフォームの表示方法と各プロパティを設定する一例だ。読者の皆さん自身で、いろいろプロパティを変更し、どのようにフォームが変化するかを確認してほしい。
次は、「フォームのモードレス表示」について解説する。
通常フォームを表示させる場合は、Showメソッドを使う。このShowメソッドを使用すると、フォームが表示されている間はExcelの操作ができなくなる。しかし、フォームを「モードレス」という表示方法で表示させると、フォームが開いたままの状態でExcelの操作が可能になる。フォームのモードレス表示の書式は次の通りだ。
{オブジェクト}.Show vbModeless
{オブジェクト}には対象となるUserFormオブジェクトを指定する。
Excelのメニューから[挿入]→[図形]を選択し「角丸四角形」をシートに配置して、「フォームの表示」というボタンを配置しておく(図4)。
では、実際にマクロを記述してみよう。
まず、VBEのメニューから、[挿入]→[標準モジュール]と選択する。プロジェクトにModule1が追加されるので、Module1をダブルクリックして、表示されるエディター画面内にリスト1のコードを記述する。
Option Explicit Sub フォームのモードレス表示() UserForm1.Show vbModeless End Sub
リスト1の3行目の通り、Showメソッドの後にvbModelessを追加するだけだ。
このマクロを図4の「フォームの表示」ボタンに関連付け実行すると、図5のように表示される。図5を見ると分かるが、フォームが表示された状態で、Excelの操作が可能になっている。
最後に、開いたフォームの閉じ方と隠し方を解説する。それぞれの書式は次の通りだ。
Unload {オブジェクト}
{オブジェクト}.Hide
{オブジェクト}には対象となるUserFormオブジェクトを指定する。
先にサンプルを紹介しておこう。図6のように三つのボタンを配置しており、それぞれのボタンをクリックすることで、フォームを表示したり、閉じたり、隠したりする。このサンプルを実際に操作する際には、必ず「フォームの表示」ボタンをクリックして、フォームを表示させてから他のボタンを試していただきたい。
「フォームの表示」ボタンに関連付けているマクロは、先に解説したリスト1だ。
今回使用するフォーム上には、説明を分かりやすくするために「テキストボックス」コントロールを1個配置している「フォームの表示」ボタンで表示されたフォームのテキストボックスに、「薬師寺国安」と文字を入力した上でUnloadとHideを試し、それぞれの挙動の違いを検証する(図7参照)。
「フォームを閉じる」と「フォームを隠す」のコードはリスト2になる。
Sub フォームを閉じる() Unload UserForm1 End Sub Sub フォームを隠す() UserForm1.Hide MsgBox UserForm1.Caption & "を一時的に隠しました。再度[フォームの表示]ボタンをクリックしてください。" End Sub
「フォームを閉じる」場合は、Unload UserForm1と記述する。
「フォームを隠す」では、Hideメソッドで隠す。隠した旨のメッセージを表示する。
リスト2の、これら2つのプロシージャを図6の「フォームを閉じる」と「フォームを隠す」ボタンに関連付ける。
フォーム上に配置した「テキストボックス」に、「薬師寺国安」と入力して、「フォームを閉じる」ボタンをクリックする。その後、「フォームの表示」をクリックすると、表示されたフォームの、「テキストボックス」内から「薬師寺国安」という文字は消えている。
次に、「フォームの表示」でフォームを表示して、「テキストボックス」に同じように「薬師寺国安」と入力し、今度は「フォームを隠す」ボタンをクリックすると、リスト2で設定したメッセージが表示される。
メッセージに従って、その後「フォームの表示」をクリックすると、今度は「テキストボックス」内に「薬師寺国安」と表示されたフォームが開く。この違いがUnloadとHideの違いだ。
今回はフォームに関するごく基本的なTipsを紹介した。直接業務には関係しないTipsのように思えるかもしれないが、この基本を知ることで、これ以降解説するフォームのTipsを理解しやすくなる。その意味でも、今回のTipsは重要だ。
「フォームを閉じる」ではフォームは完全に終了し、メモリからも削除されるが、「フォームを隠す」では、フォーム自体は、メモリ上に残り終了はしていない。「ただ隠れているだけ」という点に注目していただきたい。フォームに入力したデータの表示を隠した後にも、再度利用したい場合などではHideメソッドを使用することになる。Unloadでは、入力したデータがリセットされてしまうので、注意してほしい。
薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所
薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。
1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。
2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。
Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。
Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。
Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。
Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。
Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。
Copyright © ITmedia, Inc. All Rights Reserved.