Microsoft Access 掲示板

プロシージャの使い方 / 3

14 コメント
views
4 フォロー
3

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検索して研究してみてください。

通報 ...