|
▼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のスペックに依存するのでは?
と思います。
|
|