次の方法で共有

VBEではなくAccess上でKeyCodeを指定したい

Anonymous
2015-04-01T01:52:49+00:00

Accessのプロパティシート「イベント」タブにおける記法が知りたいです。

特にKeyCodeの入力方法が不明です。

■状況

・イベント発生元のコントロールは任意。

・VBEで任意のFunctionプロシージャを作成済み。

・このFunctionにKeyDown/キークリック時イベントにおける入力キー(KeyCode)を渡したい。

・添付画像の様にプロパティシート上で設定したい。

・従来はイベントプロシージャからFunctionを呼び出していた。

■不明点

イベント発生時にイベントプロシージャへ渡されKeyCodeへ代入される第1引数の取得方法が分かりません。

当然ながら画像のような記入では入力キーを渡せずにいます。(強制的に角括弧が付く)

イベントプロシージャ上ではなくAccessのプロパティシートに直接記入する方法で、Functionプロシージャに入力キーを渡す方法はあるでしょうか。

■補足

可能なら、AccessマクロではなくVBAによる方法を探しています。

(慣れてないだけかもしれませんが、マクロはメンテナンスしづらいと感じているため)

■参考コード

(↓ このイベントプロシージャの代わりにプロパティシートに記入したい)

Private Sub cmb区分_KeyDown(KeyCode As Integer, Shift As Integer)

    Call test(KeyCode)

End Sub

(↓ Functionプロシージャ)

Function test(KeyCode As Integer)

    Select Case KeyCode

    Case vbKeyDown

        '処理

    End Select

End Function

以上。宜しくお願いします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2015-04-01T02:54:15+00:00

プロパティ欄にFunctionを選定する方法ではイベントの引数を渡すのは無理ですね。

代替手段として下記の2つが考えられます。

1.APIを使ってキーが押されているかどうかを判定する

下記を参考にしてください。

3.1 キーボードからの入力を判定する- Excel VBA ゲーム Tips

2.クラスモジュールを使う

プロパティ欄に直接設定するという形ではないですが、複数のコントロールのイベントを一元管理できます。

クラスモジュールで検索するといろいろ解説は見つかると思いますが、とりあえず簡単なコード例を出しておきます。

VBA画面のメニューから[挿入]-[クラスモジュール]をクリックしてそこで下記のように記述します。

Option Compare Database

Option Explicit

Private WithEvents mCbx As Access.ComboBox

Public Sub Bind(objCtl As Access.ComboBox)

    Set mCbx = objCtl

    mCbx.OnKeyDown = "[EVENT PROCEDURE]"

End Sub

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

    Select Case KeyCode

    Case vbKeyDown

        MsgBox "keyDown"

        '処理

    End Select

End Sub

これを clsMyComboBox と名前をつけて保存します。

フォームのモジュールの宣言部と読み込み時のイベントプロシージャを下記のように記述します。

Private Cbx(2) As New clsMyComboBox

Private Sub Form_Load()

    Cbx(0).Bind Me.cmb区分

    Cbx(1).Bind Me.cmbXXX

    Cbx(2).Bind Me.cmbYYY

End Sub

プロパティに設定するのではなく、読み込み時に関連付けることになります。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

1 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2015-04-01T05:56:49+00:00

    Functionの引数に直接KeyCodeを指定するのは無理ですか。

    分かりました。できない事が分かっただけでも収穫です。

    1.APIを使ってキーが押されているかどうかを判定する

    入力キーを渡す事はできなくてもFunctionプロシージャ側で読み取る事は可能なようですね。

    それならそれで対応できそうです。

    2.クラスモジュールを使う

    クラスモジュール面白そうですね。コードも参考になりました。

    少し避けていた面もありましたが、そろそろ学習します。

    hatena19さんから充分な回答をいただきました。

    対応できそうで良かったです。まずはAPIのGetAsyncKeyState関数を利用してみようと思います。

    素早い回答どうもありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません