• ベストアンサー

途中で処理を中断させたい (アクセスVBA)

早速ですが、アクセスVBAでエラー処理のコードを作成していますが、メッセージボックス出力後に、 "実行時エラー13:型が一致しません" とでてきます。 おそらくデータが入っていないのにもかかわらず、次の処理を続行してしまうためにこのようなことが起こっているのではないかと思います。どのように処理をすればよいのでしょうか? 宜しくお願いします。

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

  • ベストアンサー
  • kouta52
  • ベストアンサー率27% (32/116)
回答No.3

No.2の方の答えが正しいです。 MsgBoxを表示させた後に、 Exit Subをつけないと、処理がそのまま続行されてしまうので、 エラーが発生してしまいます。 なので、データのチェックを行い、 エラーメッセージを表示した後に、 必ず、ExitSubをつけましょう。

その他の回答 (2)

noname#21585
noname#21585
回答No.2

これでどうなるかわかりませんが、 'データ名が入力されているかどうかチェック If IsNull([Forms]![ラベル作成登録画面]![cmbDTL]) Then MsgBox "データ名[左]を入力してください" End If などの入力チェックに 'データ名が入力されているかどうかチェック If IsNull([Forms]![ラベル作成登録画面]![cmbDTL]) Then MsgBox "データ名[左]を入力してください" Exit Sub End If というようにExit subを入れないとプログラムは進んでいってしまうんじゃないですかね。

  • kouta52
  • ベストアンサー率27% (32/116)
回答No.1

うーん。。。難しい質問ですね。 質問自体は、すごく単純な質問なのですが、 実際のプログラムを見てみないと、返答ができません。 例えばですが、 本来であれば処理を実行する前に、処理するデータが存在するかどうかをチェックして、 存在しないのであれば、処理をExitするだけだと思います。 プログラムを載せる事はできますか?

peko-sako
質問者

補足

kouta52さんへ プログラムの内容は下記のとおりです。 宜しくお願いします。 ************************************************** 'ラベル作成登録画面の左をクリック Private Sub 左_Click() 'データ名が入力されているかどうかチェック If IsNull([Forms]![ラベル作成登録画面]![cmbDTL]) Then MsgBox "データ名[左]を入力してください" End If '病院名が入力されているかどうかチェック If IsNull([Forms]![ラベル作成登録画面]![cmbHPL]) Then MsgBox "顧客名[左]を入力してください" End If '曜日が入力されているかどうかチェック If IsNull([Forms]![ラベル作成登録画面]![cmbYBL1]) Then MsgBox "曜日1を入力してください (予備の場合は空白を選択してください)" End If '曜日が入力されているかどうかチェック If IsNull([Forms]![ラベル作成登録画面]![cmbYBL2]) Then MsgBox "曜日2を入力してください (予備の場合は空白を選択してください)" End If '曜日が入力されているかどうかチェック If IsNull([Forms]![ラベル作成登録画面]![cmbYBL3]) Then MsgBox "曜日3を入力してください (予備の場合は空白を選択してください)" End If 'ラベルレポートを開く DoCmd.OpenForm "左" With [Forms]![左]![txtDTL1] .SetFocus .Text = [Forms]![ラベル作成登録画面]![cmbDTL] End With With [Forms]![左]![txtDTL2] .SetFocus .Text = [Forms]![ラベル作成登録画面]![cmbDTL] End With With [Forms]![左]![txtDTL3] .SetFocus .Text = [Forms]![ラベル作成登録画面]![cmbDTL] End With With [Forms]![左]![txtHPL1] .SetFocus .Text = [Forms]![ラベル作成登録画面]![cmbHPL] + " 御中" End With With [Forms]![左]![txtHPL2] .SetFocus .Text = [Forms]![ラベル作成登録画面]![cmbHPL] + " 御中" End With With [Forms]![左]![txtHPL3] .SetFocus .Text = [Forms]![ラベル作成登録画面]![cmbHPL] + " 御中" End With With [Forms]![左]![txtYBL1] .SetFocus .Text = [Forms]![ラベル作成登録画面]![cmbYBL1] End With With [Forms]![左]![txtYBL2] .SetFocus .Text = [Forms]![ラベル作成登録画面]![cmbYBL2] End With With [Forms]![左]![txtYBL3] .SetFocus .Text = [Forms]![ラベル作成登録画面]![cmbYBL3] End With End Sub

関連するQ&A

  • Access VBA

    AccessとWordの連携について教えてください。 フォーム[会社データ]上に「cmd実行」ボタンを配置しています。 行いたいのは次の作業です。 上記「cmd実行」ボタンのクリックによりWordを起動(新規文書)し,フォームに表示しているレコードから[会社名]テキストボックスのデータを2行目のセンターに,[担当者]テキストボックスのデータを4行目の左端にそれぞれ出力する。 AccessのVBAで[ツール][参照設定]で[Microsoft Word Object Library]を選択済みです。 どなたかご教授いただければと思います。何とぞよろしくお願いいたします。 なお,AccessのVBAで[ツール][参照設定]で[Microsoft Word Object Library]を選択済みです。

  • VBAでCTRLキーが押されるまで処理を待つには

    ExcelのVBAの処理で、処理結果を画面表示した後、 ユーザーが画面の内容を確認したら CTRLキーを押すと、 次の処理を続行するようにしたいのですが、 メッセージボックス(MSGBOX)などは表示しないで、 (画面表示内容以外のものは表示しないで) 処理を一時停止させて、CTRLキーが押されたら続行するには、 VBAでどのように記述すればよいでしょうか。 よろしくお願いします。(Windows10,Excel2016)

  • Accessエラー処理

    前任者が作成したAccess VBAにて作成したプログラム コンボボックス内の項目を追加処理し 登録ボタンにて登録しようとすると -2147217833 指定されたデーター量がフィールドサイズを超えています。データー量を減らし、 挿入または貼り付けを行ってください。 モジュール名 InsertData 以上のようなエラーが出ます。 行っているプログラムはコンボボックスにて選択された色名(ライトグリーン)にエクセルのカラーコード(43)を指定して 指定したエクセルのセルをこの色で塗りつぶす作業です。 説明が足りないかと思いますが、わかる限り 教えていただけないでしょうか?

  • エラー処理について。

    Accessマクロで、VBAに変換する際、「エラー処理コードを追加する。」に チェックを入れると出来る「エラー処理コード」についての質問です。 (1)このエラー処理コードは、プログラムの「異常終了」を防ぐと書いてありましたが、そもそもこの異常終了とはどのようなことを言ってるのでしょうか? (例えば、Accessが何の断りもなく、強制終了するなどといったことでしょうか。) 実際にマクロ(テーブルを開く)で作成されたエラーコードの部分だけを動かしてみて、どんなことになるのか試したいのですが、どうすれば試せるのですか? Function マクロ3() On Error GoTo マクロ3_Err DoCmd.OpenTable "テーブル1", acNormal, acEdit マクロ3_Exit: Exit Function マクロ3_Err: MsgBox Error$ Resume マクロ3_Exit End Function (2)そもそもエラー処理は、Access VBA開発ではかなり重要な要素なのでしょうか? 例えば、テキストボックスに何も入力されてなかったら、「入力してください。」とメッセージボックスを表示させるマクロを作るようなことは、 エラー処理とはまた違うのものなのですか?

  • ACCESS2010の最適化が中断される

    ACCESS2003で作成したデータをACCESS2010で使用しています。 問題なく使用できていたのですが、エラー(フォームやマクロが消去)が発生し、 再度、エラーについて、再登録し、不要なテーブルデータも削除しました。 最後に最適化をしようと実行すると、初回にエラーメッセージ(内容は不明)が表示され、 最適化が中断されました。 データ自体共有フォルダに保存しているため、他のPC(ACCESS2003)で、最適化しても 同様に中断されます。 データ容量が2GB近くあるため、それが原因なのか、もしくは他の要因なのかがわかりません。 不要なテーブルデータを削除したので、1.5GBくらいにはなるはずですが・・・ 申し訳ございませんが、わかる方がいらっしゃいましたらご教授願います。

  • Access2000のVBAでエクセルマクロ実行

    お世話になります。 Access2000のVBAでエクセルのマクロとアクセルのマクロを 交互に実行したいと思っております。 (1)エクセルのマクロ1を実行 (2)アクセスのマクロAを実行 (3)エクセルのマクロ2を実行 と交互に実行したいのです。 下記のサイトなどを参考に試みたのですが、 http://www.nurs.or.jp/~ppoy/access/access/acX005.html (1)を実行している途中に (2)が進んでしまいます。 どのようにすれば、(1)が終わってから(2)と、前の処理が 終わってから次の処理に進むことが出来るのでしょうか? Access2000のVBAから指示をかけたいので、 Access2000のVBAのコードで教えて頂ければと 思います。

  • アクセスVBAのエラーメッセージ

    次のようなVBAを更新前のイベントとして書いたのですが、実行しようとすると「抽出条件のデータ型が一致してません」というエラーメッセージが出ます。 これは、どういう意味のエラーメッセージなのでしょうか? よろしくお願いいたします。 If IsNull(DLookup("作業日", "T交通費マスター", "作業日 ='" & Me!作業日 & "'")) Then Exit Sub End If

  • ExcelVBAでのエラー処理について

    Excel2003のVBAでマクロを作成しています。 On Error Gotoを使用して開こうとしたブックを開こうとして目的のブックがなかった場合のエラー処理コードを書いたのですがうまくエラー処理行に飛んでくれず、実行時エラーのメッセージがでてマクロがとまってしまいます。 コードを見返したところ記述ミスはないようなのですが、考えられるミスは何なのでしょうか?

  • access listviewで 型が一致しません

    次のコードをAccess2002とExcel2002のフォームに 貼り付け、実行したところExcelでは問題ありません がAccessでは型が一致しませんといってエラーにな ります。 これは何が悪いのでしょうか? よろしくお願いします。 Dim oLV As New ListView Set oLV = ListView1

  • Access VBAでのフィルタ処理

    アクセス2003を使用しています。 今VBAを使用して、フォームのテキストボックスに記入された文字列を検索条件に、 クエリからデータ抽出したいのですが、 うまくいきません。 解決したい事は、 「abc*」といったように、前方が一致している文字列データを すべて抽出するといった処理です。 今は下記のようなプログラムを組んでいます。 Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "クエリ1" DoCmd.OpenQuery stDocName, acNormal, acEdit If IsNull(テキストボックス) Then Else stLinkCriteria = "[クエリデータ]=" & "'" & Me![テキストボックス] & "'" End If DoCmd.ApplyFilter stDocName, stLinkCriteria Exit_コマンド1_Click: Exit Sub Err_コマンド1_Click: MsgBox Err.Description Resume Exit_コマンド1_Click End Sub これだと完全に一致しなければ抽出してくれません。 どの様に変更すればよいでしょうか? よろしくお願いします。

専門家に質問してみよう