リストボックス・コンボボックスのリストの選択状態を解除するには?

Question 022k Previous Next
211ページ 本文 ◆ 環境・・ Excel 2002 & Windows XP
詳細は こちら
本日ご連絡を差し上げたのは、ホームページの「正誤表」に記載されていない「間違い」に気づいたからです。 実践編第2章211ページに、
(ユーザーフォームでは)
リストボックスの場合には、単に 「リストをセットする」マクロを実行するだけでリセットされます。 しかし、コンボボックスの場合は、「リストをクリアする」マクロを実行した後に 「リストをセットする」マクロを実行する必要があります。
と記載されていますが、実際の動作は、
「(ユーザーフォームでは) コンボボックスの場合には、単に「リストをセットする」マクロを実行するだけでリセットされます。しかし、リストボックスの場合は、「リストをクリアする」マクロを実行した後に「リストをセットする」マクロを実行する必要があります。」です。 ご確認下さい。
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

 

Excel VBA Macro