Excel VBA質問箱 IV

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

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


42425 / 76732 ←次へ | 前へ→

【39376】Re:コマンドボタンでEnterを押して処理さ...
発言  漂流民  - 06/6/23(金) 1:03 -

引用なし
パスワード
   ▼mutu さん:
こんばんわ

>Sheet1のコマンドボタンが選択されているときに、
>Enterを押すと、Sheet2に画面遷移はするのですが、
>その後、異常終了してしまいます。
>Sheet2のコマンドボタンをクリックしても同様です。

全く同じではありませんが、現象確認しました。
(エクセル2000 SPなし)
(エクセル2003では確認されませんでした、
 また異常終了してプロセスが残るパターンです・・・)
結論から言うと・・・、お力になれませんm(__)m

私もハマりました(笑)
参考になるか分かりませんが、検証過程を・・・


とりあえず現象が確認できる範囲でmutuさんのコードを
少し搾ってみました。
検証コード1
'---------------------------------------------------------------------
'【Sheet1】

Private Sub CommandButton1_Click()
  Sheets("Sheet2").CommandButton1.Activate
End Sub

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

  Select Case KeyCode
    Case vbKeyReturn
      Sheets("Sheet2").CommandButton1.Activate
    Case vbKeyTab
      Sheets("Sheet1").CommandButton2.Activate
  End Select

End Sub

Private Sub CommandButton2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  
  Select Case KeyCode
    Case vbKeyReturn
      Sheets("Sheet2").CommandButton1.Activate
    Case vbKeyTab
      Sheets("Sheet1").CommandButton2.Activate
  End Select

End Sub

'【Sheet2】

Private Sub CommandButton1_Click()
  Sheets("Sheet1").CommandButton1.Activate
End Sub

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = vbKeyReturn Then
    Sheets("Sheet1").CommandButton1.Activate
  End If
End Sub

'---------------------------------------------------------------------
このコードでは、
ブックを開く → シート1のコマンドボタン1をクリック →【Enter】→【Tab】→【Enter】
で約90%の再現率で現象が起きます。
【Tab】を押さない場合、現象は起きませんでした。
(シート1のコマンドボタン1をクリック →【Enter】→【Enter】→【Enter】)


次にダメモトで、イベント内で処理させず、Jakaさんも同じように指摘されていますが
処理を分け、KeyCodeを直接渡さないという形にしてみました。
検証コード2
'---------------------------------------------------------------------
'【Sheet1】

Private Sub CommandButton1_Click()
  Sheets("Sheet2").Activate
  ActiveSheet.CommandButton1.Activate
End Sub

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

  Select Case KeyCode
    Case vbKeyReturn
      Call bmove("Enter", 1)
    Case vbKeyTab
      Call bmove("Tab", 1)
  End Select

End Sub

Private Sub CommandButton2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

  Select Case KeyCode
    Case vbKeyReturn
      Call bmove("Enter", 2)
    Case vbKeyTab
      Call bmove("Tab", 2)
  End Select

End Sub

Function bmove(kc As String, bno As Integer)

  Select Case kc
   Case "Enter"
    Sheets("Sheet2").Activate
    ActiveSheet.CommandButton1.Activate
   Case "Tab"
    Select Case bno
     Case 1
      Sheets("Sheet1").Activate
      ActiveSheet.CommandButton2.Activate
     Case 2
      Sheets("Sheet1").Activate
      ActiveSheet.CommandButton1.Activate
    End Select
  End Select

End Function

'【Sheet2】

Private Sub CommandButton1_Click()
  Sheets("Sheet1").Activate
  ActiveSheet.CommandButton1.Activate
End Sub

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = vbKeyReturn Then
    Sheets("Sheet1").Activate
    ActiveSheet.CommandButton1.Activate
  End If
End Sub

'---------------------------------------------------------------------
結局、
Function bmove(kc As String, bno As Integer)
を標準モジュールに書くなどいろいろ試しましたが
結果は同じでした。


なので、検証コード1をさらに煮詰めてみました。
検証コード3
'---------------------------------------------------------------------
'【Sheet1】

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = vbKeyReturn Then
      Sheets("Sheet2").Activate
  End If
End Sub

'---------------------------------------------------------------------
KeyCodeをvbKeyTab、vbKeyBack、vbKeyEscapeなどにしても結果は同じでした。
しかも私の環境では再現率100%になりました。


最終的に私のところではこれでエラーになります。
検証コード4
'---------------------------------------------------------------------
'【Sheet1】

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Sheets("Sheet2").Activate
End Sub

'---------------------------------------------------------------------
どのボタンを押しても異常終了します(苦笑)
CommandButton以外にもTextBox、ComboBoxなどで同じでした。
”Sheets("Sheet2").Select”にしても
イベントを”KeyUp”イベントにしても同じでした。
(KeyPressイベントはTabやEnterが取れないはずなので確認していません)


で結論としては、
エクセル2000ではKeyDown(又はKeyUp)のイベントでシート移動は不具合を起こす。
ということでは・・・?
先日もエクセル2000のバグらしきものにハマりました。
[#38873]保存しているのに確認ダイアログが出る 』
なので、オフィスをアップデートすることで解決する可能性は高いです。


余談ですが・・・
mutuさんの環境では
>Sheet1のコマンドボタンが選択されているときに、
>Enterを押すと、Sheet2に画面遷移はするのですが、
>その後、異常終了してしまいます。
>Sheet2のコマンドボタンをクリックしても同様です。
となるようですが、私のところではなりません。
上記の検証から推測すると
現象は、SheetsをActivateにした後、CommandButtonをActivateにする前に、
起こるように思われます。
つまりSheetsをActivateにして、CommandButtonをActivateにする
間のラグがほぼなければ現象が再現されないかも?
要するにPCのスペックに依存するのでは?
と思います。
5 hits

【39296】コマンドボタンでEnterを押して処理させ... mutu 06/6/21(水) 16:58 質問
【39307】Re:コマンドボタンでEnterを押して処理さ... 漂流民 06/6/22(木) 3:22 発言
【39316】Re:コマンドボタンでEnterを押して処理さ... mutu 06/6/22(木) 11:12 質問
【39319】Re:コマンドボタンでEnterを押して処理さ... Jaka 06/6/22(木) 11:28 発言
【39320】Re:コマンドボタンでEnterを押して処理さ... mutu 06/6/22(木) 11:36 質問
【39328】Re:コマンドボタンでEnterを押して処理さ... Jaka 06/6/22(木) 12:02 発言
【39329】Re:コマンドボタンでEnterを押して処理さ... mutu 06/6/22(木) 12:19 質問
【39336】デバックで順を追ってみたのですが mutu 06/6/22(木) 13:33 質問
【39338】Enterキー押下時の処理で他の方法はあり... mutu 06/6/22(木) 14:07 質問
【39358】Re:Enterキー押下時の処理で他の方法はあり... Jaka 06/6/22(木) 15:54 発言
【39365】Re:Enterキー押下時の処理で他の方法はあり... mutu 06/6/22(木) 16:43 質問
【39376】Re:コマンドボタンでEnterを押して処理さ... 漂流民 06/6/23(金) 1:03 発言
【39383】Re:コマンドボタンでEnterを押して処理さ... mutu 06/6/23(金) 9:14 質問
【39395】Re:コマンドボタンでEnterを押して処理さ... Jaka 06/6/23(金) 10:29 発言
【39398】Re:コマンドボタンでEnterを押して処理さ... mutu 06/6/23(金) 11:36 お礼
【39421】Re:コマンドボタンでEnterを押して処理さ... Jaka 06/6/23(金) 16:32 発言
【39436】Re:コマンドボタンでEnterを押して処理さ... 漂流民 06/6/23(金) 22:31 発言
【39520】Re:コマンドボタンでEnterを押して処理さ... mutu 06/6/26(月) 9:26 お礼
【39435】Re:コマンドボタンでEnterを押して処理さ... 漂流民 06/6/23(金) 22:19 発言

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