dポイントプレゼントキャンペーン実施中!

ACCESSのAutoKeysマクロでプロシージャを呼び出しているのですが、
そのVBAコードの中に、条件分岐を作っていて
その返り値がFalseの時だけ以降の処理を継続させようとしています。

ここでTrueの場合は警告メッセージを出した上で
処理を終えるためVBAでEndと記述しているのですが、
このTrueの際にアクションの実行エラーウィンドウが必ず出て
困っています。(格好悪い)

こちらを出ないようにするにはどうしたらいいでしょうか。
もしくはマクロ名で言うAutoKeysのような処理を、マクロを
使わずにVBAだけで記述・実行する方法はありますでしょうか?

長い質問になってしまいましたが、
ご存知のやさしい方ぜひ教えてください。
よろしくお願いします。

A 回答 (2件)

VBA では、基本的に「End」は使用しません。


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

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

本当にありがとうございました!^^

お礼日時:2007/10/04 11:42

とりあえず、「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などであれば、オンラインヘルプではなく「オフライン時のヘルプ」で検索:
'  検索ウィンドウの下方にあるコンボボックスで選択できます)
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/04 22:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!