hatena
hatena
2024/03/06 (水) 13:56:23
KeyCode = 0 でキー入力をキャンセルしようとしているのだと思いますが、残念ながらそれでは動きません。
キークリック時の自動生成されるイベントプロシージャをみると、下記のようになっています。
Private Sub テキスト0_KeyDown(KeyCode As Integer, Shift As Integer)
End Sub
引数に KeyCode というのがありますが、この引数に 0 を代入することでキー入力がなかったことになります。
別のプロシージャ内の変数 KeyCode とは何の関連もないので、別のプロシージャで KeyCode=0 としても意味はないです。
このような場合は、別プロシージャで、イベントプロシージャの KeyCode を参照渡しで渡せば、別のプロシージャ内でも、KeyCode にアクセスできるようになります。
フォームモジュール
Private Sub proKey1(ByRef KeyCode As Integer)
If KeyCode = 9 Or KeyCode = 17 Or KeyCode = 67 Then 'Tab・Ctrl・C キーのみ使える
Exit Sub
Else
KeyCode = 0 'Tab・Ctrl・C キー以外は禁止
End If
End Sub
Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)
Call proKey1(KeyCode)
End Sub
引数には値渡し(ByVal)と参照渡し(ByRef)がありますが、その違いについてはWEB検索して研究してみてください。
通報 ...