|
Answer |
Copyright (C) 2004.1.28 永井善王 |
|
|
拙著 「ExcelVBAマクロ組み方講座」 をご愛読、ありがとうございます。 そして、貴重な情報のご提供、お礼申し上げます。
実践編2章6は 「ActiveXコントロールの選択状態を解除する」と題する学習で、ご指摘のカ所は右図のように、一旦選択されたコンボボックス、リストボックスの選択状態を解除(リセット)する方法として、その最後にご紹介したところですね。
ActiveXコントロールのコンボボックス、リストボックスは、ワークシートまたはユーザーフォームのどちらででも利用できます。 しかし、コードの使い分けが必要であるなど微妙な違いがあり、筆者としてもできるだけ分りやすく解説するように努めましたが、学習される方も大変だったと思います。
つきましては、あなたが書き加えてくださった 「(ユーザーフォームでは) 」 を参考にし、Active X コントロールの所在別に下表のとおりまとめておきました。 一部喰い違いがあるようですので、お手数ですがご確認いただければ幸いです。
|
| Active X コントロールの所在 |
標準モジュールのマクロで リセットする場合 |
フォームモジュールのマクロで リセットする場合 |
| ワークシートのリストボックス |
リストをセット(b) |
− |
| 〃 コンボボックス |
リストをクリアしてからセット(a) |
− |
| ユーザーフォームのリストボックス |
〃 |
リストをクリアしてからセット(a) |
| 〃 コンボボックス |
〃 |
〃 |
|
なぜこうなるのか、その理由を考えてみましょう。
リストの選択状態は、そのコントロールの ListIndexプロパティの値を取得すれば知ることができます(注1)。 そして、その値を -1 に設定すればリセットされます。 (注1)複数選択を許可していない場合
しかし、すでにリストが選択されている状態で上表の (a)が付いたセットを実行した場合、ListIndexプロパティの値は -1 に戻らず以前の状態が保持されます。 それに対して (b)が付いたセットを実行した場合、ListIndexプロパティの値が -1 に戻るからかと思われます。
選択状態を解除する別の方法
ListIndexプロパティの値を設定して選択状態を解除するコードは、下記のとおりです。 (オブジェクト名は例示)
|
| Active X コントロール |
標準モジュールのマクロで |
フォームモジュールのマクロで |
| ワークシートのリストボックス |
ActiveSheet.ListBox3.ListIndex = -1 |
− |
| 〃 コンボボックス |
ActiveSheet.ComboBox4.ListIndex = -1 |
− |
| ユーザーフォームのリストボックス |
UserForm1.ListBox3.ListIndex = -1 |
ListBox3.ListIndex = -1 |
| 〃 コンボボックス |
UserForm1.ComboBox4.ListIndex = -1 |
ComboBox4.ListIndex = -1 |
|