ここから本文です

お世話になります。 現在下記環境にてコーディングしておりますが実行時エラーが...

gyo********さん

2019/2/1917:23:35

お世話になります。
現在下記環境にてコーディングしておりますが実行時エラーが発生します。
Access2016(32bit)
Win7Pro(32bit)

目的
作成したフォーム内にてファンクションキーの制御をする。
(押したファンクション

キーに対応するコマンドボタンのCaptionと同プロシージャを実行する)

【フォームモジュール内】
Private Sub Form_KeyDown(Keycode As Integer, Shift As Integer)

If PushBtnName(Keycode:=Keycode) = "" Then
Exit Sub
Else
Application.Run "FN_" & PushBtnName(Keycode:=Keycode)
End If
End Sub

Private Sub FN_~~~()
処理
End Sub

【標準モジュール内】
Public Function PushBtnName(Keycode As Integer) As String

Select Case Keycode

Case Is = vbKeyF1
Keycode = 0 '既存の「ヘルプ表示」機能を無効化
Screen.ActiveForm.Controls("btn_F01").SetFocus
Case Is = vbKeyF2
Screen.ActiveForm.Controls("btn_F02").SetFocus
Case Is = vbKeyF3
Screen.ActiveForm.Controls("btn_F03").SetFocus
Case Is = vbKeyF4
Screen.ActiveForm.Controls("btn_F04").SetFocus
Case Is = vbKeyF5
Screen.ActiveForm.Controls("btn_F05").SetFocus
Case Is = vbKeyF6
Screen.ActiveForm.Controls("btn_F06").SetFocus
Case Is = vbKeyF7
Screen.ActiveForm.Controls("btn_F07").SetFocus
Case Is = vbKeyF8
Screen.ActiveForm.Controls("btn_F08").SetFocus
Case Is = vbKeyF9
Screen.ActiveForm.Controls("btn_F09").SetFocus
Case Is = vbKeyF10
Screen.ActiveForm.Controls("btn_F10").SetFocus
Case Is = vbKeyF11
Screen.ActiveForm.Controls("btn_F11").SetFocus
Case Is = vbKeyF12
Keycode = 0 '既存の機能を無効化
Screen.ActiveForm.Controls("btn_F12").SetFocus
End Select

If Screen.ActiveForm.ActiveControl.Caption <> "" Then
PushBtnName = Screen.ActiveForm.ActiveControl.Caption
End If

End Function

PushBtnNameを標準モジュール内に記載したのは、複数のフォームで使用する機能だからです。
上記を実行時に「'FN_~~~'プロシージャが見つかりません。」表示がされます。

検索した所、CallByNameにて対応している例がございましたが、どうも理解が足りず私では対応できませんでした。
ご教授願います。

閲覧数:
76
回答数:
1

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

hat********さん

2019/2/1919:22:46

Application.Run で呼び出すプロシージャは標準モジュールにPublic宣言で記述しておく必要があります。

【標準モジュール内】
Public Sub FN_~~~()
    処理
End Sub

  • 質問者

    gyo********さん

    2019/2/1920:22:08

    回答ありがとうございます。
    やはり標準モジュール内に記述が必要なのですね。

    呼び出したい処理ですが、呼び出し元のフォームによって処理内容が異なる(例.「FN_検索実行」でも呼び出し元がFM_伝票検索、FM_仕入処理、dlg_得意先検索等によって処理内容が異なる)ので、フォームモジュール内に記述できるのが一番良い方法かと思い探しておりました。

    また、本記のように呼び出すプロシージャ名を動的に記述する方法が考えつかずこのような事態になっております。

    Application.Run以外の方法で、各フォームモジュールに記述したFNキーの処理を実行する方法はありますでしょうか。

    お手数おかけいたします。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/2/21 08:12:23

返信にてCallByNameを使用した例文も提示いただきありがとうございました。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる