• ベストアンサー

アクセスのVBAについて、フォームの On Error Goto についておしえてください。

Private Sub cmd次_Click() On Error GoTo Err DoCmd.GoToRecord , , acNext Exit_Click: Exit Sub Err: MsgBox "この先にレコードがなくなると、ここをつうかするのだろうか。" Resume Exit_Click End Sub 一連の流れについて,ご解説ください。よろしくお願いいたします。

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

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

詳しくは、DoCmd.GoToRecord・・・の行にブレークポイント(F9)を仕掛けてコードを実行し、止まった位置から1行ずつ実行(F8)させると分かります。 *****エラー処理の色々************ Sub cmd次_Click()  MsgBox "1"  On Error Resume Next '以後エラーが起きても無視する  DoCmd.GoToRecord , , acNext  If Err <> 0 Then 'エラーが起きていれば   MsgBox "2"  End If  On Error GoTo 0 '以後エラーが起きたら、エラーになる  MsgBox "3" End Sub 'DoCmd.GoToRecord・・・でエラーなら1,2,3、エラーでなければ1,3 ***************** Sub cmd次_Click()  MsgBox "1"  On Error GoTo ErrTrap 'エラーが起きた時点でErrTrapにジャンプ  DoCmd.GoToRecord , , acNext  MsgBox "2"  MsgBox "3" Exit_Click:  MsgBox "4" Exit Sub ErrTrap:  MsgBox "5"  Resume 'エラーをクリアして、再トライ End Sub 'エラー時は、1,5,5,5,5・・・(次レコードに移動できるようになるまで、繰り返し) 、非エラー時は1,2,3,4 ******************* Sub cmd次_Click()  MsgBox "1"  On Error GoTo ErrTrap 'エラーが起きた時点でErrTrapにジャンプ  DoCmd.GoToRecord , , acNext  MsgBox "2"  MsgBox "3" Exit_Click:  MsgBox "4" Exit Sub ErrTrap:  MsgBox "5"  Resume Next'エラーをクリアして、エラーの次の行にジャンプ End Sub 'エラー時は、1,5,2,3,4 、非エラー時は1,2,3,4 ******************* Sub cmd次_Click()  MsgBox "1"  On Error GoTo ErrTrap 'エラーが起きた時点でErrTrapにジャンプ  DoCmd.GoToRecord , , acNext  MsgBox "2"  MsgBox "3" Exit_Click:  MsgBox "4" Exit Sub ErrTrap:  MsgBox "5"  Resume Exit_Click 'エラーをクリアして、Exit_Clickにジャンプ End Sub 'エラー時は、1,5,4 、非エラー時は1,2,3,4 *******************

その他の回答 (1)

  • ponnta
  • ベストアンサー率17% (31/179)
回答No.1

On Error GoTo ラベルは それ以降の処理でエラーが発生したときにラベルにジャンプします。 次の行が繰り返し文ですが、処理中にエラーが発生したときは繰り返しを中止してErrへジャンプしてエラーメッセージを表示してEnd Subで終了します。 エラーが無ければ条件まで繰り返し処理を行いExit Subで終了します。

関連するQ&A

  • GoToRecordで実行時エラー '2105'

    教えてください。Access2000です。 Private Sub 次へ_Click() On Error GoTo Err_次へ_Click On Error Resume Next DoCmd.GoToRecord , , acNext Exit_次へ_Click: Exit Sub Err_次へ_Click: MsgBox ERR.Description Resume Exit_次へ_Click End Sub って書いたのですが、最後のレコードまで行った後 「次へ」をクリックすると実行時エラーになってしまいます。 移動できませんとかメッセージで逃げたいのですがどうすればいいのでしょうか? お願いします。

  • 100問を超えたら終了ですのメッセージをだしたい(あくせす)

    Private Sub cmd次_Click() On Error GoTo Err_cmd次_Click DoCmd.GoToRecord acForm, "F_さあやってみよう", acNext If (Forms!F_さあやってみよう!txt番号 = 100) 'これだと100問になったときにメッセージがでてしまいます。100問を終了してボタンをクリックしたら 終了のメッセージを表示したいのですが、 101という番号はありません。 Then Beep MsgBox "終了です(*^。^*)", vbInformation, "終了" End If Exit_cmd次_Click: Exit Sub Err_cmd次_Click: MsgBox Err.Description Resume Exit_cmd次_Click End Sub よろしくお願いしますm(__)m

  • アクセスVBAのエラーについて

    フォームを閉じるためにフォームにボタンを置いて、イベントプロシージャに下記のように書き込みました。すると添付画像のエラーが返ってきてマクロが動きません。 Private Sub コマンド103_Click() On Error GoTo Err_コマンド103_Click DoCmd.Close Exit_コマンド103_Click: Exit Sub Err_コマンド103_Click: MsgBox Err.Description Resume Exit_コマンド103_Click End Sub で、「ファイル-オプション-現在のデータベース」の”フォームの表示”を問題のフォームに切り替えたら問題なく動作します。 つまり”フォームの表示”で選んだフォームでしかコマンドボタンのマクロが動きません。全てのフォームでマクロが動くにはどうしたらよいのでしょうか?

  • Access VBA にて on error goto がたまに機能し

    Access VBA にて on error goto がたまに機能しないPCがあるます。 具体的には、on error gotoのコーディングを無視して、エラーのポップアップが表示される 何か対応する方法は、ありますか? 環境 ネットーワークにあるmdbをドライブに接続して、Accessを起動しています。   Windows2000(sp4)+Access2000(sp3) 他のPCでは、問題ありません。PCは、イメージをクローンして作成していますので、同一です。 ※コーディングイメージ Private Sub 稼働時間_AfterUpdate() on error goto ERR_稼働時間 Dim errcnt as integer errcnt = 0 DoCmd.GotoRecord A_FORM,"時間入力",A_NEXT <----- エラーのポップアップが表示される if errcnt = 1 Then DoCmd.GotoRecord A_FORM,"時間入力",A_PREVIOUS end if exit sub ERR_稼働時間: errcnt = errcnt + 1 resume next end sub

  • アクセスにて検索フォームを作りたい

    お世話になります。 アクセス初心者です。 会社名検索フォームに会社名を入力して表示コマンドをクリックすると 会社フォームの入力した会社が表示されるようにしたいのです。 現在は、表示コマンドをクリックすると会社フォームが開きます。 どの会社名を打ち込んでもNo.1のレコードしか開きません。 つまり会社フォームが開く という指示をしているだけです。 コードなど全く分かりません。 ただ、本を見て真似て下記の通り入力してみました。 間違っているor足りない ということはわかっていますが、 どう入力すれば良いのかわかりません。 教えて下さい。よろしくお願いいたします。 Private Sub cmd表示_Click() On Error GoTo Err_cmd表示_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "会社フォーム" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_cmd表示_Click: Exit Sub Err_cmd表示_Click: MsgBox Err.Description Resume Exit_cmd表示_Click End Sub

  • access vba 構文の解読

    access vba 構文の解読 はじめまして先ほどaccess2003について質問させていただいたものです。以下の構文が先ほどの続きです。こちらも皆様のお力で構文を解読していただけないでしょうか。 すみません解読とは、構文の一行一行が何を示しているのか教えていただけると助かります。 よろしくお願いいたします。 ' Exit the application. Case conCmdExitApplication CloseCurrentDatabase ' Run a macro. Case conCmdRunMacro DoCmd.RunMacro rs![Argument] ' Run code. Case conCmdRunCode Application.Run rs![Argument] ' Open a Data Access Page Case conCmdOpenPage DoCmd.OpenDataAccessPage rs![Argument] ' Any other command is unrecognized. Case Else MsgBox "不明なオプションです。" End Select ' Close the recordset and the database. rs.Close HandleButtonClick_Exit: On Error Resume Next Set rs = Nothing Set con = Nothing Exit Function HandleButtonClick_Err: ' If the action was cancelled by the user for ' some reason, don't display an error message. ' Instead, resume on the next line. If (Err = conErrDoCmdCancelled) Then Resume Next Else MsgBox "コマンド実行中のエラーです。", vbCritical Resume HandleButtonClick_Exit End If End Function Private Sub メニュー終了_Click() On Error GoTo Err_メニュー終了_Click DoCmd.Close Exit_メニュー終了_Click: Exit Sub Err_メニュー終了_Click: MsgBox Err.Description Resume Exit_メニュー終了_Click End Sub Private Sub 終了_Click() On Error GoTo Err_終了_Click DoCmd.Quit Exit_終了_Click: Exit Sub Err_終了_Click: MsgBox Err.Description Resume Exit_終了_Click End Sub

  • アクセスのフォームからレコード入力空欄回避のVBA

    アクセス初心者です。 帳票式フォームからテーブルへのレコード入力において、次のレコード入力ボタンで空欄を防止するためのVBAを作っていますが、うまく行きません。空欄があれば警告は出ますがそのままテーブルへ記録されてしまいます。 テーブルに記録されずに空欄が入力できるようにするにはどうすればよいのでしょうか? また、次を入力するときにフォームの製品名の内容だけ消えずに残したいのですが、そのプログラムについても教えていただきたいです。 なかなかうまく行かずに大変困っています。 どなたかVBAの達人の方、初心者にわかりやすくお教え下さい。 「入力内容を登録して次を入力」ボタンで作ったVBAは次の通りです。 つぎはぎなので、不要なプログラムもあるかもしれません。 Private Sub コマンド9次のレコードに_Click() On Error GoTo Err_コマンド9次のレコードに_Click DoCmd.GoToRecord , , acNext Exit_コマンド9次のレコードに_Click: Exit Sub Dim Rst As DAO.Recordset Set Rst = CurrentDb.OpenRecordset("T_指定材料表", dbOpenTable) With Rst .AddNew .Fields("製品名") = Me!製品名 .Fields("回路記号") = Me!回路記号 .Fields("部品名") = Me!部品名 .Fields("員数") = Me!員数 .Update If IsNull(Me!製品名) Then MsgBox ("製品名が空欄です。") Resume Exit_コマンド9次のレコードに_Click End If If IsNull(Me!回路記号) Then MsgBox ("回路記号が空欄です。") Resume Exit_コマンド9次のレコードに_Click End If If IsNull(Me!部品名) Then MsgBox ("部品名が空欄です。") Resume Exit_コマンド9次のレコードに_Click End If If IsNull(Me!員数) Then MsgBox ("員数が空欄です。") Resume Exit_コマンド9次のレコードに_Click End If End With On Error Resume Next DoCmd.GoToRecord DataForm, "T_指定材料表", acNew Rst.Close Set Rst = Nothing Call ClearControls End Sub

  • access2000設定について

    access2000で下記のような設定をしています。 フォーム画面より、表示ボタンをクリックすると プレビュー状態でそのままで、画面に表示されません。どこが悪いのでしょうか・ Private Sub cmd表示_Click() DoCmd.Maximize If gOnErrorCtl Then On Error GoTo Err_cmd表示_Click lblStatus.Caption = "総勘定元帳をプレビュー表示します" Call PrintSokanjo If RtnCd Then lblStatus.Caption = "プレビュー中 . . ." DoCmd.OpenReport "R_総勘定元帳出力用変更", acViewPreview lblStatus.Caption = "総勘定元帳プレビュー終了" Else MsgBox "印刷は中止されました", vbOKOnly, AppName End If Exit_cmd表示_Click: Exit Sub Err_cmd表示_Click: Resume Exit_cmd表示_Click End Sub

  • Access VBAで行ラベルが定義されていないというエラーが出ます

    VBA初心者です。 下記のソースで行ラベルを定義しているつもりなのですが、 なぜか行ラベルが定義されていませんというコンパイルエラーがでます。 よろしくお願いします。 Private Sub cmd_Click() On Error GoTo Err_cmd_Click <---ここ Dim inp As String Dim cnt As Integer inp = Forms![フォーム1]![日付] 'フォームの非連結テキストボックスと連動 For cnt = 1 To 31 'インポート・フルパス名作成 If (cnt) < 9 Then strImportFileNameM = "M:\PdxLog\KabeKaKinA" & inp & "0" & cnt + 1 & ".csv" DoCmd.TransferText acImportDelim, , "KabeDownLoad", strImportFileNameM, False Else strImportFileNameM = "M:\PdxLog\KabeKaKinA" & inp & cnt + 1 & ".csv" DoCmd.TransferText acImportDelim, , "KabeDownLoad", strImportFileNameM, False End If Next cnt '正常終了 Exit_cmd_Click: End Sub 'エラー処理 Err_cmd_Click: Beep Select Case Err.Number Case Else MsgBox Err.Number & ":" & Err.Description End Select Resume Next End Sub

  • アクセスのイベント記述について。

    アクセスで登録ボタンをコントロールウィザードで作ったのですが、登録と同時にそのフォームを閉じるにはどうしたらよいでしょうか。現在の登録ボタンのイベント記述は下記のとおりです。よろしくお願いいたします。 Private Sub 登録_Click() On Error GoTo Err_登録_Click DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Exit_登録_Click: Exit Sub Err_登録_Click: MsgBox Err.Description Resume Exit_登録_Click End Sub

専門家に質問してみよう