Excel VBA質問箱 IV

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

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


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

【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 発言[未読]

【39296】コマンドボタンでEnterを押して処理させ...
質問  mutu  - 06/6/21(水) 16:58 -

引用なし
パスワード
   こんばんは、
とても困ってしまったのでよろしくお願いします。

Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)

If Keycode = 13 Then   
  Command1_Click
End If

End Sub

Private Sub Command1_Click()

  Dim buf As String

  ChDir ThisWorkbook.Path

  buf = Date
  With Sheets("画面1")
    .Box1.Value = Year(buf)
    .Box2.Value = Month(buf)
    .Select
  End With
  
End Sub

という、プログラムでコマンドボタンにフォーカスがある時に、
エンターを押したら画面遷移させるというものです。

ただ、これでコマンドボタンにフォーカスがある時にエンターを押すと、

“問題が発生したため、Microsoft Excel for Windows を終了します。 ご不便をおかけして申し訳ありません。”

という、ウィンドウが出てきて、
Excelが異常終了してしまいます。

画面遷移やブックを閉じたりをしない処理だとうまくいくのですが、
画面遷移やブックを閉じたりする場合だけ、異常終了になります。

なぜなのでしょうか?

ご教授のほど、よろしくお願いいたします。

【39307】Re:コマンドボタンでEnterを押して処理さ...
発言  漂流民  - 06/6/22(木) 3:22 -

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

確認したいのですが、使用されているのはエクセルVBAですか?

バージョンの違いなどには詳しくないのですが、
>Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
は”VB”のデフォルトのコマンドボタンのKeyDownイベントだと思うのですが?
”VBA”ではデフォルトで
Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
となると思うのですが?

あと、
>    .Box1.Value = Year(buf)
>    .Box2.Value = Month(buf)
のBox1、Box2はテキストボックスということですか?
”VB”のデフォルトでは”Text1”、”VBA”のデフォルトでは”TextBox1”だと思うのですが?
(オブジェクト名はデフォルトを使用するようにして下さい)

OS、Office、(VBを使用しているようであれば)VB、のバージョンを記載してください。
同じ環境の回答者が答えられると思います。

とりあえず、私の環境では

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then
    CommandButton1_Click
  End If
End Sub

Private Sub CommandButton1_Click()
  With Sheets("Sheet1")
    .TextBox1.Value = Year(Date)
    .TextBox2.Value = Month(Date)
    .Select
  End With
End Sub

は問題なく動作します。

【39316】Re:コマンドボタンでEnterを押して処理さ...
質問  mutu  - 06/6/22(木) 11:12 -

引用なし
パスワード
   失礼しました。
詳細を書かせていただきます。

OSはWinXP、Professional ver2002, SP2
ExcelはExcel2000
エクセルのVB Editorで編集しています。

試しに、下記のような、仮プログラムを作ってみましたが
やはり異常終了してしまいました。

Sheet1にボタン×2
Sheet2にボタン×2(画面遷移ボタン、終了ボタン)
という構成です。
※同一シート内のボタンはTabでフォーカス移動させる。


【ThisWorkbook】

Private Sub Workbook_Open()
  ChDir ThisWorkbook.Path
  With Application
    .ScreenUpdating = False     '画面更新なし
    .DisplayFormulaBar = False   
  End With
  
  Sheet1.Activate
End Sub

'エクセルを終了させる。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.Quit
End Sub


【Sheet1】

Private Sub CommandButton1_Click()
    ChDir ThisWorkbook.Path
    Sheet2.Activate
End Sub

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Call 移動(KeyCode, 1)  'Tabキー押下でフォーカス移動

  If KeyCode = 13 Then  'Enterキー押下でボタンクリック
  CommandButton1_Click
End If
End Sub

Private Sub CommandButton2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Call 移動(KeyCode, 2)  'Tabキー押下でフォーカス移動

  If KeyCode = 13 Then   'Enterキー押下でボタンクリック
  CommandButton1_Click
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  CommandButton1.Activate
End Sub

'Tabキー押下でフォーカス移動をさせるため
Sub 移動(KeyNo, No)
If KeyNo = vbKeyTab Then
  If No >= 2 Then
   No = 1
  Else
   No = No + 1
  End If
 
  If No = 1 Then
    ActiveSheet.OLEObjects("CommandButton1").Activate
  ElseIf No = 2 Then
    ActiveSheet.OLEObjects("CommandButton2").Activate
  End If
End If
End Sub


【Sheet2】

Private Sub Worksheet_Activate()
  ChDir ThisWorkbook.Path   
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  CommandButton1.Activate
End Sub

Private Sub CommandButton1_Click()
  ChDir ThisWorkbook.Path
  Sheet1.Activate
End Sub

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then
  CommandButton1_Click
End If
End Sub

'終了ボタン
Private Sub CommandButton2_Click()
  ChDir ThisWorkbook.Path
  
  Application.DisplayFormulaBar = True
  ActiveWorkbook.Protect Structure:=False, Windows:=True 'ブック

  Application.DisplayAlerts = False              '確認メッセージを出さない
  ActiveWorkbook.Close 'SaveChanges:=False          '確認メッセージを出さずに閉じる
  Application.DisplayAlerts = True
End Sub


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


▼漂流民 さん:
>▼mutu さん:
>こんばんわ
>
>確認したいのですが、使用されているのはエクセルVBAですか?
>
>バージョンの違いなどには詳しくないのですが、
>>Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer)
>は”VB”のデフォルトのコマンドボタンのKeyDownイベントだと思うのですが?
>”VBA”ではデフォルトで
>Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
>となると思うのですが?
>
>あと、
>>    .Box1.Value = Year(buf)
>>    .Box2.Value = Month(buf)
>のBox1、Box2はテキストボックスということですか?
>”VB”のデフォルトでは”Text1”、”VBA”のデフォルトでは”TextBox1”だと思うのですが?
>(オブジェクト名はデフォルトを使用するようにして下さい)
>
>OS、Office、(VBを使用しているようであれば)VB、のバージョンを記載してください。
>同じ環境の回答者が答えられると思います。
>
>とりあえず、私の環境では
>
>Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
>  If KeyCode = 13 Then
>    CommandButton1_Click
>  End If
>End Sub
>
>Private Sub CommandButton1_Click()
>  With Sheets("Sheet1")
>    .TextBox1.Value = Year(Date)
>    .TextBox2.Value = Month(Date)
>    .Select
>  End With
>End Sub
>
>は問題なく動作します。

【39319】Re:コマンドボタンでEnterを押して処理さ...
発言  Jaka  - 06/6/22(木) 11:28 -

引用なし
パスワード
   たぶん、
目安箱に書いておいたバグ情報
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=64;id=FAQ
[XL2000]テキストボックスにフォーカスした状態でCloseメソッドを実行するとエラー
だと思う。

・余計な引用は消してください。

【39320】Re:コマンドボタンでEnterを押して処理さ...
質問  mutu  - 06/6/22(木) 11:36 -

引用なし
パスワード
   ご回答ありがとうございます。

ただ、
テキストボックスにフォーカスした状態でCloseメソッドを実行はせずに、

Sheet1のCommandButton1をクリックして、
画面遷移させようとすると、
Sheet2に画面遷移した後、
異常終了が起きてしまいます。

・余計な引用の多用、今後気をつけます。

【39328】Re:コマンドボタンでEnterを押して処理さ...
発言  Jaka  - 06/6/22(木) 12:02 -

引用なし
パスワード
   現象を理解してませんけど、ちゃんとシートを指定してみたらどうでしょう。

Sheets("Sheet1").CommandButton1 = True

【39329】Re:コマンドボタンでEnterを押して処理さ...
質問  mutu  - 06/6/22(木) 12:19 -

引用なし
パスワード
   すいません、コードの中身が違っていたので訂正します。

【訂正前】
【Sheet1】【Sheet2】の両方
Private Sub CommandButton1_Click()
  ChDir ThisWorkbook.Path
  Sheet1.Activate
End Sub

【訂正後】
【Sheet1】
Private Sub CommandButton1_Click()
  ChDir ThisWorkbook.Path
  Sheets("Sheet2").CommandButton1.Activate
End Sub

【Sheet2】
Private Sub CommandButton1_Click()
  ChDir ThisWorkbook.Path
  Sheets("Sheet1").CommandButton1.Activate
End Sub

【削除】
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  CommandButton1.Activate
End Sub
*********************************************
*********************************************

【ThisWorkbook】

Private Sub Workbook_Open()
  ChDir ThisWorkbook.Path
  With Application
    .ScreenUpdating = False     '画面更新なし
    .DisplayFormulaBar = False   
  End With
  
  Sheet1.Activate
End Sub

'エクセルを終了させる。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.Quit
End Sub


【Sheet1】

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

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Call 移動(KeyCode, 1)  'Tabキー押下でフォーカス移動

  If KeyCode = 13 Then  'Enterキー押下でボタンクリック
  CommandButton1_Click
End If
End Sub

Private Sub CommandButton2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Call 移動(KeyCode, 2)  'Tabキー押下でフォーカス移動

  If KeyCode = 13 Then   'Enterキー押下でボタンクリック
  CommandButton1_Click
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  CommandButton1.Activate
End Sub

'Tabキー押下でフォーカス移動をさせるため
Sub 移動(KeyNo, No)
If KeyNo = vbKeyTab Then
  If No >= 2 Then
   No = 1
  Else
   No = No + 1
  End If
 
  If No = 1 Then
    ActiveSheet.OLEObjects("CommandButton1").Activate
  ElseIf No = 2 Then
    ActiveSheet.OLEObjects("CommandButton2").Activate
  End If
End If
End Sub


【Sheet2】

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

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then
  CommandButton1_Click
End If
End Sub

'終了ボタン
Private Sub CommandButton2_Click()
  ChDir ThisWorkbook.Path
  
  Application.DisplayFormulaBar = True
  ActiveWorkbook.Protect Structure:=False, Windows:=True 'ブック

  Application.DisplayAlerts = False              '確認メッセージを出さない
  ActiveWorkbook.Close 'SaveChanges:=False       '確認メッセージを出さずに閉じる
  Application.DisplayAlerts = True
End Sub

【39336】デバックで順を追ってみたのですが
質問  mutu  - 06/6/22(木) 13:33 -

引用なし
パスワード
   【Sheet1】のIf KeyCode = 13 Thenの行にブレークポイントを作り、
【Sheet1】のCommandButton1にフォーカスを当てた状態で、
Enterキーを押下してデバックしてみました。

1. If KeyCode = 13 Then  'Enterキー押下でボタンクリック

2. CommandButton1_Click

3. Private Sub CommandButton1_Click()

4. ChDir ThisWorkbook.Path

5. Sheets("Sheet2").CommandButton1.Activate
ここで、Sheet2へ飛ぶ

6.End Sub

7.End If

8.End Sub
この後、異常終了します。

【39338】Enterキー押下時の処理で他の方法はあり...
質問  mutu  - 06/6/22(木) 14:07 -

引用なし
パスワード
   ふと、考えたのですが、
Enterキー押下時の処理の仕方が悪いのではないかと思いました。

Excelシート上にコマンドボタンを配置した場合の処理は、
下記以外の方法はありませんでしょうか?

Private Sub CommandButton1_Click()
    ChDir ThisWorkbook.Path
    Sheet2.Activate
End Sub

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

  If KeyCode = 13 Then  'Enterキー押下でボタンクリック
  CommandButton1_Click
  End If
End Sub

【39358】Re:Enterキー押下時の処理で他の方法はあ...
発言  Jaka  - 06/6/22(木) 15:54 -

引用なし
パスワード
   同じ環境を作るのが面倒なので推測ですが、
こう言う書き方がスマートだとか言って、こればっかり使う人もいますが、
    Sheets("Sheet2").CommandButton1.Activate

仕事を事を分けてやったらどうでしょうか?
Sheets("Sheet2").Activate
CommandButton1.Activate

97の時は2000と全く違う動きをしていましたが、アクティブセルを見失っているんじゃ...?
で、キー操作だけですべて操作を済ませられるほど、シート上のアクティブXコントロールは優れた物じゃなかったと思い

ます。
シート上のアクティブXコントロール不評はよく聞くし....。

▼mutu さん:
>Excelシート上にコマンドボタンを配置した場合の処理は、
>下記以外の方法はありませんでしょうか?
前にすでに書きました。

【39365】Re:Enterキー押下時の処理で他の方法はあ...
質問  mutu  - 06/6/22(木) 16:43 -

引用なし
パスワード
   お忙しいところ、お手数おかけしております。

【Sheet1】で、

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

としていたのを、

【Sheet1】で

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

としましたが、同じ位置で異常終了してしまいました。
原因不明のドツボに陥っています・・・

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

【39383】Re:コマンドボタンでEnterを押して処理さ...
質問  mutu  - 06/6/23(金) 9:14 -

引用なし
パスワード
   お忙しいところ、
時間を割いて検証していただき、
ありがとうございます。

WindowsXP Professional ver2002 SP2
Excelは2000です。

PCは
Dell DIMENSION DIM4600C
Intel(R) Pentium(R) 4 CPU 2.80GHz
2.79GHz, 512 MB RAM
です。

Excel2000で動かせないと駄目なので、
2003にUpDateせずに解決できたらと思っております。

ちなみに、KeyDown(KeyPress,KeyUp)以外の方法でEnterを押したら、
シート移動させる(コマンドボタンをクリックさせる)方法はありませんでしょうか?
過去ログ探してみましたが、探せませんでした。
よろしくお願いします。

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

【39395】Re:コマンドボタンでEnterを押して処理さ...
発言  Jaka  - 06/6/23(金) 10:29 -

引用なし
パスワード
   質問内容がようやくわかりました。
これね、KeyDownプロシジャーが、End Subを抜ける時、CommandButton1にフォーカスが移せない状態だとエラーになるんじゃないかと思っています。
っていうより、コントロールがあるシートのアクティブセルかも。
多分、97の有名なアクティブXコントロール不具合解消時のバグじゃないかと思ってます。
不完全だと思いますが、取りあえず。
バグみたいな爆弾抱えているから、キー操作だけでアクティブXコントロールの操作は止めた方がいいと思います。

Sub 選択()
  Sheets("Sheet2").Activate
End Sub

Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  Application.OnTime Now(), "選択 "
End Sub

【39398】Re:コマンドボタンでEnterを押して処理さ...
お礼  mutu  - 06/6/23(金) 11:36 -

引用なし
パスワード
   回答ありがとうございます。

やはり、Enterキー押下することによって、
コマンドボタンの処理(シート変更)を実行させるのは不可能なのでしょうか?
なんか他の方法があればよいのですが、
バグって大変な状況になっているので、
とりあえず削除しておきます。

なにか、KeyDownプロシージャを使用する以外の方法が見つかりましたら、
教えてください。よろしくお願いします。

【39421】Re:コマンドボタンでEnterを押して処理さ...
発言  Jaka  - 06/6/23(金) 16:32 -

引用なし
パスワード
   http://park7.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200606/06060318.txt

KeyCode = 0 とは、気が付かなかった。

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

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


>Excel2000で動かせないと駄目なので、
>2003にUpDateせずに解決できたらと思っております。
SP(サービスパック)を当ててみては?といういう意味だったのですが、
どうもダメなようです。
回避策がいくつか出ていると思うので試してみてください^^

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

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

>  Application.OnTime Now(), "選択 "
これも含め回避策はいろいろあるようですね。
勉強になりました^^

【39520】Re:コマンドボタンでEnterを押して処理さ...
お礼  mutu  - 06/6/26(月) 9:26 -

引用なし
パスワード
   ありがとうございました。

KeyCode=0というのを試してみたいと思います。

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