On Error Resume Nextを複数のプロシージャーで使うことは不可能ですか?

このQ&Aのポイント
  • On Error Resume Nextステートメントを複数のプロシージャーで使用することはできないようです。
  • Module1のコードでは、Option Compare DatabaseおよびOption Explicitステートメントの後に、複数のマクロが定義されています。
  • しかし、On Error Resume Nextステートメントを複数のマクロで連続して使用することはできません。エラーが発生しやすくなり、デバッグが困難になります。
回答を見る
  • ベストアンサー

On Error Resume Nextを複数のプロシージャーで使うことは不可能ですか?

Module1に ------------------------------------------- Option Compare Database Option Explicit Sub マクロ1() End Sub Sub マクロ2() End Sub ------------------------------------------- があるのですが ------------------------------------------- Option Compare Database Option Explicit Sub マクロ1() On Error Resume Next End Sub Sub マクロ2() On Error Resume Next End Sub ------------------------------------------- ではなく ------------------------------------------- On Error Resume Next Option Compare Database Option Explicit Sub マクロ1() End Sub Sub マクロ2() End Sub ------------------------------------------- これはできないのでしょうか? エラーになります。 dimもつけても駄目でした。 ひとつづつやっていくしかないのでしょうか?

  • dfghhj
  • お礼率99% (432/434)

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

エラーをスキップするのではなく単にエラーを出さないだけでいいなら Sub test01() On Error Resume Next Call マクロ1 Call マクロ2 End Sub Sub マクロ1() x = 1 / 0 'エラー発生 MsgBox "マクロ1" End Sub Sub マクロ2() y = 1 / 0 'エラー発生 MsgBox "マクロ2" End Sub で出来ますが、こうするとそれぞれのマクロはエラー発生時点で止まってしまいそれぞれのMsgboxがでなくなってしまいます。 やはり個々のプロシージャ別に入れる必要があるようですね。

dfghhj
質問者

お礼

なるほど。ありがとうございます。

関連するQ&A

  • エクセルVBAでOn Error Resume Next

    エラーを回避するためにOn Error Resume Nextを使用することがありますが、その有効範囲について教えてください。 記述の在るプロシージャ内だけかと思っていたのですが、 どうも記述した以降、End Subのまでの間を超えて、そのプロシージャから呼び出す次のプロシージャ以降まで効いているみたいです。 ひょっとしてOn Error Goto 0で止めないと、連続しているプロシージャの最後まで有効なのでしょうか?

  • [VB6/VBA] Variant型配列リテラルの書き方

    http://oshiete1.goo.ne.jp/qa4043791.html の#1のURIに http://exceler.blog68.fc2.com/blog-entry-20.html Dim a() As Variant // As Variant追加。As Integerとかは無理っぽい a = [{32,5,0}] //これ というような表記があるのですが,msdn.comもしくはmicrosoft.comのどこかに,この書き方に関する解説はありますか? VB.NETで Option Explicit On Option Compare Binary Option Strict On Option Infer Off Module Program Sub Main() Dim a() As Integer a = new integer(){1,2,3} End Sub End Module というような書き方が出来るのは知っているのですが。

  • アクセス2000VBA DAOをADOに書き換えてください

    アクセス2000VBA DAOをADOに書き換えてください 下記プログラムをADOに書き換えてください。(DAT1、DAT2はモジュールにて定義してあります) Option Compare Database Dim DBS As Database Dim QDF As QueryDef Dim RST As DAO.Recordset Dim COUNT1 Private Sub Form_Load() On Error Resume Next DAT2 = [Forms]![伝票]![HAKKOU1] Set DBS = CurrentDb Set QDF = DBS.QueryDefs("発行") With QDF .Parameters("DAT1") = DAT2 ’もしかしたら DAT2 ではエラーがでるかもしれません。 Set RST = .OpenRecordset() ’正しい記述を教えてください .Close End With With RST COUNT1 = !指示書 .Close End With

  • Resume は Ctrl+J の ヒントでは出てこない?

    Sub test() Dim i As Long On Error GoTo エラーのとき i = "a" エラー終了: Exit Sub エラーのとき: MsgBox "エラーです" Resume エラー終了 End Sub このような簡単なエラー処理のフ゜ロク゛ラムで「Resume」を記載するときに Ctrl+Jを押して「res」を打ってもヒントが出ません。 (Resetしかでません) オブジェクトブラウザで「Resume」を検索しても ヒットしません。 だからヒントでもでないのでしょうか?

  • 標準モジュールだとエラーになる理由を教えてください

    アクセスのフォームの上にコマンドボタンを一つ設置して、 クリックイベントで Private Sub コマンド0_Click() DoCmd.Close acForm, Me.Name End Sub とすれば、自身のフォームが閉じます。 しかし、 Private Sub コマンド0_Click() Call test End Sub と、 標準モジュール Option Compare Database Option Explicit Sub test() DoCmd.Close acForm, Form_フォーム1 End Sub にすると、 実行時エラー2498 指定した式は、 いずれか の引数とデータ型が対応していません。 になります。 行ってる意味は同じだと思うのですが、 なぜエラーになるのか教えていただけますか?ご教授よろしくお願いします。

  • 定数の宣言ってdimは使えないのですか?

    VBAです。 標準モジュールに Option Explicit Public Const フォルダ名 As String = "新しいフォルダー" Sub aaaa() End Sub はできるのですが、 Option Explicit dim Const フォルダ名 As String = "新しいフォルダー" Sub aaaa() End Sub は、エラーになってしまいます。 Option Explicit Sub aaaa() dim Const フォルダ名 As String = "新しいフォルダー" End Sub もダメみたいです。 定数を使うときは、必ずPublicで宣言しなけらばいけないのでしょうか?

  • ExcelのVBAでエラーになるのですが

     最近、VBAを始めたので、よくわかっていないのですが、以下のようなマクロを書いています。(長いので、かなり省略していますが)一応、動くようになったのですが、なぜか、一旦、最初(sheet 1)に戻ってしまうことがあります。(何度か繰り返して、進みますが) なぜなのかと考えると、該当シートが見つからないからのようなのですが、どのように対策したら良いのでしょうか? Dim s_A As String Sub Spec() s_A = "1" Call Spec3 Call Spec4 s_A = "2" Call Spec3 Call Spec4   'このあと s_A = "100" まで続く ActiveWorkbook.Close End Sub Sub Spec3() On Error Resume Next Do Until Selection.Value = ""   If ~ then Else ~ Else if ~ End If Loop 'ここで、動作を繰り返させている End Sub  そこで、エラー対策として、specの先頭にOn Error Resume Nextを入れるとエラーになりますよね?  該当シートがない場合は、次のシート(3行下)にジャンプさせたいのですが。  よろしくお願いします。

  • On Timeメソッド?で更新されません。

    On Timeメソッド?で更新されません。 現在Web上にあった例を参考に 下記の様にホワイトボード解析シートのA1セルに 20秒ごとに現在時刻を表示させています。 これを応用して、違うシートに 17:00に天気というマクロを実行するよう 作成したのですが上手くいきませんでした。 Sub Auto_Open()とSub auto_close()のtargetTimeを targetTime = TimeValue("17:00") Macro7を天気 としたのですが、なぜ更新されなかったか分かる方がいらっしゃいましたら ご教授下さい。 Sub Auto_Open() Dim TargetTime, WaitTime TargetTime = Now + TimeValue("00:00:01") WaitTime = TimeValue("00:00:10") Application.OnTime TargetTime, "Macro7", WaitTime End Sub Sub Macro7() On Error Resume Next Worksheets("ホワイトボード解析").Range("A1").Calculate Application.OnTime Now + TimeValue("00:00:20"), "Macro7", TimeValue("00:00:10") '↑TimeValueの最初の方をへんこうする事で時間が変わる End Sub Sub auto_close() Dim i As Integer, TargetTime On Error Resume Next For i = 1 To 10 TargetTime = Now + TimeValue("00:00:" & Application.Text(i, "00")) Application.OnTime TargetTime, "Macro7", , False Next i End Sub

  • VB6.0 →VB2005 のアップグレードでエラー表示

    VB6.0の標準モジュールでは Private Type typset a As String b As String c As Integer End Type Public make() As typset と記述してエラーもなく正常なのですが、VB2005にアップグレードしたときに、 Option Strict Off Option Explicit On Module Module1 Private Structure typset Dim a As String Dim b As String Dim c As Integer End Structure Public make() As typset←▼エラー▼            End Module 【エラー内容】 'make' は、module 'Module1' をとおして型 'typset' を namespace 'WindowsApplication1' で公開することはできません。 structure部をPublicなどにしてもエラーは消えますが、参照先に影響が出てしまいます。 根本的な解決方法が分かりません。 教えていただけないでしょうか?

  • フォームのボタンを押した時に、SQLのデータを取得し帳票に表示したい。

    ACCESS2003を使用して、帳票出力の機能を作成しようとしています。 フォームであるボタン(コマンド5)を押したときに帳票(1)を出力したいのですが、帳票(1)に出力されるレコードをSQLによって制御したいと思っていますが、うまくいきません。 以下がコードになります。基本的な質問ではあると思いますが、いろいろ調べてもわからなかったので、ご回答、ご指摘いただけるとうれしいです。よろしくお願いします。 Option Compare Database Private Sub コマンド5_Click() On Error Resume Next Dim strSQL As String strSQL = "SELECT * FROM アプリデータDB WHERE アプリデータDB.端末名 = 'AAAA' " DoCmd.OpenReport "帳票(1)", acPreview, , strSQL End Sub

専門家に質問してみよう