- ベストアンサー
TextをEnterKeyで選んだ後にLISTBOXを非表示
OSはWin XP home EXCEL2002を使用しています。 ActivecellにリストボックスのデータをEnterKeyで入れた後にリストボックスの表示をFalseにしたいと思っています。以下のようにすると必ずEXCELが落ちてしまいます。 Private Sub ListBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii = vbKeyReturn Then ActiveCell.Value = ListBox1.Text ListBox1.Visible = False End If End Sub 何がいけないのかよく分かりません。悪い部分の解説もできればお願いしたいと思います。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ActiveCell.Value = ListBox1.Text ListBox1.Visible = False KeyAscii = 0 でどうでしょうか。 どうも、『KeyAscii』が一因のように思えます。 当方、Excel97、質問のコードでは同様に落っこちました。 『KeyAscii = 0』を追加すると、質問のコードは問題なく機能しました。原因の説明ではなく、ちょっといじったら動いたという連絡と思ってください。 >悪い部分の解説もできればお願いしたいと思います。 ・・・分かりません。。。が正直なところです。 動いていたコードをボタンに貼り付けると動かなかったり、 『ActiveCell.Activate』が必要だったりするのと同じ症状でしょうか? 『ListBox1.Visible = False』を独自に実行すると問題ないので、 フォーカスがどこにあるかが原因かもしれません。 いずれにしても原因は???です。何故なんでしょうね。(やはり一般人です)
その他の回答 (1)
- papayuka
- ベストアンサー率45% (1388/3066)
ListBox は Sheet上にあるんですよね? Excel97で確認しました。 キーイベントのプロシージャ内で Visible プロパティを操作するとダメなのかな?この辺は憶測なんで、聞き流して下さい。 取りあえず代替案でフォーカスが外れた時に非表示にするとか、、、 '************************************************************************* Private Sub ListBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii = vbKeyReturn Then ActiveCell.Value = ListBox1.Value End If End Sub '************************************************************************* Private Sub ListBox1_LostFocus() ListBox1.Visible = False End Sub '************************************************************************* Private Sub CommandButton1_Click() ListBox1.Visible = True End Sub
お礼
はい、ListBoxはシート上にあります。 代替案ありがとうございます。早速試させていただきましたが、手動で他の場所をクリックしないとListBoxは消えてくれないですね。やはり、選んだらすぐにいなくなって欲しいのです。 強制的にLostFocusさせるため、ActiveCell.Value = ListBox1.Value の後にRange("a1").selectとしてみましたが、やはりEXCELが落ちてしまうようです。
お礼
出来ましたっ!(^^)! Win XP & XL2002, Win 2000 & XL2002の組み合わせ両方で大丈夫でした。 nishi6さんが一般人? まさっかー!? 先日は私自身もお世話になりましたし、今私が作っている製品には何箇所もnishi6さんが他の方へ回答された分のコードが活躍してくれています。 ありがとうございました!