Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12778 / 13644 ツリー ←次へ | 前へ→

【8690】リストボックスのバグでしょうか? Yoshie 03/10/29(水) 14:01 質問
【8699】Re:リストボックスのバグでしょうか? ねこ@江坂 03/10/29(水) 15:25 回答
【8700】Re:リストボックスのバグでしょうか? BOTTA 03/10/29(水) 15:43 回答
【8706】ありがとうございました。 Yoshie 03/10/29(水) 17:07 お礼

【8690】リストボックスのバグでしょうか?
質問  Yoshie  - 03/10/29(水) 14:01 -

引用なし
パスワード
   リストボックスを使うとどうしてもEXCELが飛んでしまいます。

回避方法や何か情報がありましたら教えてください。

再現方法

1.ワークシートにリストボックス(ListBox1)をおく。
2.リストボックスの中身はEXCELが起動したときに入れる。

Private Sub Workbook_Open()
  With Sheet1
    .ListBox1.AddItem "Sheet2"
    .ListBox1.AddItem "Sheet3"
    .ListBox1.Activate
    .ListBox1.ListIndex = 0  
  End With
End Sub

3.ListBox1のKeyDownイベントで以下のように記述する。

Dim Myws as Object

Set Myws = WorkSheets("Sheet2")
Myws.Activate
Myws.Range("A1").select
Set Myws = nothing

4.一度ファイルを保存し、閉じて再度このファイルを起動する。

5.実行モードでリストボックスのSheet2の場所でENTERを押す。
[結果]
Sheet2がアクティブになりカーソルもA1にいるが、
瞬時に、問題が発生したためMicrosoft Excel for Windowsを終了します。
というメッセージが出てExcelが飛びます。

ちなみにリストボックスの代わりにコマンドボタンを使った場合は
飛びません。

以上、よろしくお願いします。

開発環境:WinXp Professional + Excel2000

【8699】Re:リストボックスのバグでしょうか?
回答  ねこ@江坂  - 03/10/29(水) 15:25 -

引用なし
パスワード
   ▼Yoshie さん:こんちゃ
久々に回答にやってきた ねこ@江坂です。

>リストボックスを使うとどうしてもEXCELが飛んでしまいます。
>
>回避方法や何か情報がありましたら教えてください。
>
>再現方法
>
>1.ワークシートにリストボックス(ListBox1)をおく。
>2.リストボックスの中身はEXCELが起動したときに入れる。
>
>Private Sub Workbook_Open()
>  With Sheet1
>    .ListBox1.AddItem "Sheet2"
>    .ListBox1.AddItem "Sheet3"
>    .ListBox1.Activate
>    .ListBox1.ListIndex = 0  
>  End With
>End Sub
>
>3.ListBox1のKeyDownイベントで以下のように記述する。
>
>Dim Myws as Object
>
>Set Myws = WorkSheets("Sheet2")
>Myws.Activate
>Myws.Range("A1").select
>Set Myws = nothing
>
>4.一度ファイルを保存し、閉じて再度このファイルを起動する。
>
>5.実行モードでリストボックスのSheet2の場所でENTERを押す。
>[結果]
>Sheet2がアクティブになりカーソルもA1にいるが、
>瞬時に、問題が発生したためMicrosoft Excel for Windowsを終了します。
>というメッセージが出てExcelが飛びます。
>
>ちなみにリストボックスの代わりにコマンドボタンを使った場合は
>飛びません。
>
>以上、よろしくお願いします。
>
>開発環境:WinXp Professional + Excel2000
 たぶんですが…

 KeyDownイベントにしているてめにExcelがオブジェクトを見失うからでしょう。
 KeyUpイベントにするわけにはいかないですか?

じゃねじゃね

【8700】Re:リストボックスのバグでしょうか?
回答  BOTTA  - 03/10/29(水) 15:43 -

引用なし
パスワード
   Yoshieさん、ねこ@江坂さん、こんにちは。
この記述だと、どのKeyを押しても反応してしまいます。
また、KeyDownイベントを検知した後、Focusがコントロールに戻ろうとするのを
  Myws.Activate
でじゃまをしているんでは無いでしょうか?
それで、Excel又はコントロール(この場合はListBox)に怒られてしまったのでしょう。

やりたいことを私なりに解釈して、修正してみました。

Private Sub Workbook_Open()
Dim ws As Worksheet
  With Sheet1.ListBox1
  .Clear
    For Each ws In Worksheets
      .AddItem ws.Name
    Next
  .ListIndex = 0
  End With
End Sub

Private Sub ListBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim Myws As Worksheet
  If KeyCode = vbKeyReturn Then
  On Error Resume Next
    Set Myws = Worksheets(Sheet1.ListBox1.Value)
  On Error GoTo 0
    If Not Myws Is Nothing Then
      Myws.Activate
      Myws.Range("A1").Select
    End If
  End If
End Sub

【8706】ありがとうございました。
お礼  Yoshie  - 03/10/29(水) 17:07 -

引用なし
パスワード
   ねこ@江坂さん、BOTTA さん、お返事ありがとうございます。

KeyUpイベントにしたら、飛ぶという現象がなくなりました。
どうもありがとうございました。

12778 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free