図4:Office 97およびOffice 2000のActiveXコントロール |
![]() |
また、さらに残念なことに、Office 2000になってもActiveXコントロールは「ウィンドウ」ではありません。ウィンドウは、Win32 API(Application Programming Interface)プログラミングの話になります(ここでその詳細に触れることは控えます)。要するにウィンドウは、画面上の矩形の領域と考えてください。そして、マウスによるクリックなどのユーザーからの入力をメッセージとして受け取って処理することができるWindowsアプリケーションの基本部品をウィンドウと呼ぶのです。ご存知の方もいらっしゃると思いますが、VBでは5.0から搭載されていたAddressOf演算子がOffice 2000 VBAにも遅ればせながら実装されました。だからこそ、なおさら「ActiveXコントロールはウィンドウではない」という現実には思わず首をかしげたくなります。この点に関しては、本家のVBと差別化を図りたかったのでしょうか。
ただ、ひとつだけ非常に嬉しいバージョンアップがあります。これまでは、フォームを表示すると「アプリケーションモーダル」の状態を余儀なくされていました。つまり、フォームの表示中はアプリケーションに対する入力は一切受け付けられなかったのです。Office 97 VBAでは、この現象を回避するためにRefEditコントロールなどを使用していましたが、Office 2000 VBAでは、
Sub DisplayForm()
UserForm1.Show vbModeless
End Sub
とShowメソッドの引数にvbModelessを指定すると、フォームはモードレスで表示されます。また、フォームのShowModalプロパティにFalseを代入しても同じ効果が得られます。
図5:フォームをモードレス表示して、セルのデータをテキストボックスに貼り付ける |
![]() |