• ベストアンサー

ACCESSのAutoKeysマクロでアクションの実行エラーが必ず出る

ACCESSのAutoKeysマクロでプロシージャを呼び出しているのですが、 そのVBAコードの中に、条件分岐を作っていて その返り値がFalseの時だけ以降の処理を継続させようとしています。 ここでTrueの場合は警告メッセージを出した上で 処理を終えるためVBAでEndと記述しているのですが、 このTrueの際にアクションの実行エラーウィンドウが必ず出て 困っています。(格好悪い) こちらを出ないようにするにはどうしたらいいでしょうか。 もしくはマクロ名で言うAutoKeysのような処理を、マクロを 使わずにVBAだけで記述・実行する方法はありますでしょうか? 長い質問になってしまいましたが、 ご存知のやさしい方ぜひ教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

VBA では、基本的に「End」は使用しません。 ランタイム環境では、End でエラーが発生します。 他にも、ヘルプに書かれていると思いますが End はグローバル変数の初期化なども行われますので 以降の処理で、思わぬ結果になったりします。 「Exit Sub」 または 「Exit Function」で抜けるようにしてください。 これでもエラーが発生するようなら 原因は他にあるのでしょう。

isurf
質問者

お礼

ありがとうございます。 EndをExit Functionにして問題なく動きました。 大雑把な性格が災いしたみたいです。(笑) 本当にありがとうございました!^^

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

とりあえず、「End」に関してはbonaronさんの回答を見ていただくとして、本当に「格好悪い」と いう以外の問題がないのでしたら、以下のようにSub/Functionの冒頭にエラー発生時の処理 を記述することで、エラーメッセージを出さなくすることができます。 '<案1> '発生した全て(?)のエラーを無視して、以降の処理を継続します。 Public Function Test1() As Integer On Error Resume Next  '←エラー時には、次の処理を継続   '(変数などの宣言)   '(処理実行部) End Sub '<案2> '現在把握している特定のエラーのみ無視して処理を継続し、それ以外のエラーが発生した '場合はメッセージを表示します。 Public Function Test1() As Integer On Error Goto Err_Test1  '←エラー時には、「Err_Test1」に飛ぶ   '(変数などの宣言)   '(処理実行部)   'ここまで問題なく処理された場合はそのままFunctionを終了   '(通常時に「エラー処理」が実行されるのを回避)   Exit Function Err_Test1:  '←エラー発生時に実行する処理が記述されている位置を示すラベル   If Err = 0 Then  '←無視するエラーの番号を指定     Resume Next  '次の処理を実行   Else     MsgBox Err & ":" & Error$, , "Test1"  'エラーメッセージを表示     Exit Function  '処理を中止(継続させたいなら、上と同様に「Resume Next」を指定)   End If End Sub '※無視を指定しなかったエラーでは「(番号):(エラーメッセージ)」の形でメッセージが表示 '  されますので、必要に応じ、「If Err=0 Or Err=1 Then」等と追加して下さい。 '  (なお、上記「Err=0」はダミーです) '※「Resume」などについての詳細は、ヘルプを参照してください。 '  (Access2003などであれば、オンラインヘルプではなく「オフライン時のヘルプ」で検索: '  検索ウィンドウの下方にあるコンボボックスで選択できます)

isurf
質問者

お礼

非常に詳しいんですね。知識が豊富で本当に羨ましいです。 大変参考になりました。ありがとうございました!!(^0^)