VB5.0で実行時エラーが発生する

このQ&Aのポイント
  • VB5.0でDBGRIDを呼び出し、戻ってきてからメッセージボックスを表示しようとすると、「実行時エラー5 プロシージャの呼び出し、または引数が不正です」が出ます。
  • F_SelKokyak.Show vbModalの後に、条件に応じたレコードを取得しようとしています。
  • レコードが存在しない場合、エラーメッセージを表示して処理を終了します。
回答を見る
  • ベストアンサー

VB5.0 で実行時エラーがでる

VB5.0でDBGRIDを呼び出し、戻ってきてからメッセージボックスを表示しようとすると、「実行時エラー5 プロシージャの呼び出し、または引数が不正です」が出ます。それもEXEから実行する時だけです。 OSはXPです。 以下のプログラムで、メッセージボックスを表示しなかったら実行時エラーはでません。 F_SelKokyak.Show vbModal If Wk_Modoru = 0 Then   Set RecUri = MAINdb.OpenRecordset("Select * " & _ " From FT_Uriage " & _ " Where Uri_MiseCode = " & Wk_MiseCode & _ " And Uri_KaisKbn = " & 1 & _ " And Uri_KyakCode = " & Sel_KyakCode & _ " And Uri_UriSbt = " & 0 & _ " And Uri_UriKakKin <> 0" & _ " Order By Uri_UriNo; ") If RecUri.RecordCount = 0 Then RecUri.Close Set RecUri = Nothing If Wk_KaisKbn = 2 Then MsgBox "売掛金はありません。", vbCritical, "入力エラー" F_EigMainInp!txtKyakName2.SetFocus Exit Sub End If End If

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

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.6

> 元の現象 > は発生します。 > On Errorを最初の行に入れましたが、同じ現象です。 そうですか・・・と言うことは、 「システムのエラー処理自体がおかしくなっている」か、 「(何故か)全然関係ない箇所でエラーが発生している」か、 どちらかでしょうね。 前者なら、私にはお手上げ(「MsgBoxを使うのをあきらめる?」ぐらいしか提案できません)、 後者なら・・・「全コード(全プロシージャ)に、同様に「On Error」と「行ラベル」を入れてみて、実際のエラー発生箇所を探す」ぐらいしか無いと思います。

hirorih
質問者

お礼

On Errorを全てのsubに入れ、絞って行ったところ、 全然関係ない箇所でエラーが発生していました。 なんとか解決できました、ありがとうございました。

その他の回答 (8)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.9

★追記。 ・バグを発見! ・『MsgBox』がある『If Then』の『End If』が『Exit Sub』になっているので、  『実行時エラー5 プロシージャの呼び出し、または引数が不正です』が出ると思います。 ・以上。おわり。

hirorih
質問者

お礼

なんとか解決出来ました、ありがとうございました。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.8

★1つだけアドバイス ・『MsgBox "売掛金はありません。", vbCritical, "入力エラー"』の行を  『MsgBox("売掛金はありません。", vbCritical, "入力エラー")』とカッコをつけてたらどうなる? ・以上。おわり。

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.7

http://homepage2.nifty.com/winfaq/c/trouble.html#643 によりますと、Windowsの現行版に対応していないアプリをインストールすると 音が出なくなることがあるようです。 VB5.0はXPには対応していないので、OSの定数テーブルが壊れたのでは ないかと推測します。 vbCritical定数と"入力エラー"を指定せず、単なるMsgBoxだけでも、 エラーになりますでしょうか?

hirorih
質問者

お礼

なんとか解決出来ました、ありがとうございました。

hirorih
質問者

補足

MsgBoxだけでも同じ現象です

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.5

> On Errorにもひっかからず、エラーメッセージは出ませんでした。 元の現象 > メッセージボックスが表示される前にエラーが出ます。 > その後、エラーを閉じると、メッセージボックスが表示され、 > メッセージボックスを閉じると、プログラムが終了します。 は、発生したんでしょうか?それとも、コレも発生しなくなった? 発生するなら・・・ 別の箇所でエラーの可能性がありますが・・・ 「On Error」はSub(Function?)の最初の方に入れたんでしょうか? #違う場合、「On Error」をSubの最初の行として入れても同じでしょうか? #コレで駄目となら・・・申し訳ありませんが、私はGiveUpです・・・

hirorih
質問者

補足

>元の現象 >> メッセージボックスが表示される前にエラーが出ます。 >> その後、エラーを閉じると、メッセージボックスが表示され、 >> メッセージボックスを閉じると、プログラムが終了します。 は発生します。 On Errorを最初の行に入れましたが、同じ現象です。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.4

1つ確認するのを忘れていました。 「MsgBox」って言う名前の関数とかを、作ってませんよね? #まず無いとは思いますが、念の為。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.3

> メッセージボックスが表示される前にエラーが出ます。 > その後、エラーを閉じると、メッセージボックスが表示され、 > メッセージボックスを閉じると、プログラムが終了します。 完全に想定外の動作・・・私の手に負えないかも・・・ #VB5+XPの組み合わせは、MSの動作保証外なので、 #組み合わせが原因の不具合だと手の打ち様が無い場合も・・・ とりあえず、 > それもEXEから実行する時だけです。 の時のデバッグ方法。 あ。その前に、1点確認です。 ソースのどこかで、「On Error」の指定をしているところがありますか? もし、あるなら、先ず、「On Error」の行を全部コメントにしてから実行してみてください。 動作が変わりますか? #変わった場合、どう変わったか教えてください。 もし、「On Error」が無い、または、あったが、コメントにしても動作が変わらない場合、 コードを以下の様に書き換えてから、実行してみてください。 ---------------------------------------------------------- On Error Goto ERRX: ' <= 追加 1: '<=追加(要するに、各行の前に「1:」「2:」・・・と「行ラベル」を付けてください。) F_SelKokyak.Show vbModal 2: '<=追加 If Wk_Modoru = 0 Then   Set RecUri = MAINdb.OpenRecordset("Select * " & _ " From FT_Uriage " & _ " Where Uri_MiseCode = " & Wk_MiseCode & _ " And Uri_KaisKbn = " & 1 & _ " And Uri_KyakCode = " & Sel_KyakCode & _ " And Uri_UriSbt = " & 0 & _ " And Uri_UriKakKin <> 0" & _ " Order By Uri_UriNo; ") 3: '<=追加 If RecUri.RecordCount = 0 Then 4: '<=追加 RecUri.Close 5: '<=追加 Set RecUri = Nothing 6: '<=追加 If Wk_KaisKbn = 2 Then 7: '<=追加 MsgBox "売掛金はありません。", vbCritical, "入力エラー" 8: '<=追加 F_EigMainInp!txtKyakName2.SetFocus 9: '<=追加 Exit Sub 10: '<=追加 End If 11: '<=追加 End If 12: '<=追加 ' 以下は、End Subとかの直前に追加 Exit Sub ' もし、関数の中なら、「Exit Function」 ERRX: MsgBox "Err:" & Err.Number & "(" & Err.Description & ")on " & Erl ---------------------------------------------------------- で、どのタイミングで、エラーメッセージがでるか教えてください。

hirorih
質問者

補足

On Errorは書いていません。 ご指示の通りにしましたが、何も変わりません。 On Errorにもひっかからず、エラーメッセージは出ませんでした。 MsgBox という関数は作っていません。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> いいえ、MsgBox "売掛金はありません。", vbCritical, "入力エラー"を > 入れたらエラーになるんですが、 > はずせばエラーにはならないんです。 つまり、「メッセージボックスが表示されない表示する前にエラーになる)」ってことでしょうか? それとも、「メッセージボックスは表示されるが、メッセージボックを閉じた後にエラーになる」ってことでしょうか? 後者なら、「MsgBox」の次の行、 つまり「F_EigMainInp!txtKyakName2.SetFocus」でエラーになったのかもしれません。 ちなみに、私は、後者のつもりで回答しました。 #念の為お尋ねしますが・・・「どの行がエラーか」確認してますか? #デバッグしてますか? > また、そうだとすると、どうすればいいのでしょうか? もしそうなら、 > > MsgBox "売掛金はありません。", vbCritical, "入力エラー" > > F_EigMainInp!txtKyakName2.SetFocus > この2行の順番を逆にしてみるとか・・・ こうするだけで直る可能性がありますけど・・・ #これで、直らない&デバッグしていない場合、デバッグしてみてください。 #デバッグのやり方がわからないなら、お尋ねください。

hirorih
質問者

補足

メッセージボックスが表示される前にエラーが出ます。 その後、エラーを閉じると、メッセージボックスが表示され、 メッセージボックスを閉じると、プログラムが終了します。 > > MsgBox "売掛金はありません。", vbCritical, "入力エラー" > > F_EigMainInp!txtKyakName2.SetFocus > この2行の順番を逆にしてみるとか・・・ 逆にしてみましたが、エラーになります。 デバッグのやりかたを教えていただけますでしょうか。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

> F_EigMainInp!txtKyakName2.SetFocus ここで、エラーってことでしょうか? フォーカスの移動が間に合っていないのでは? #フォームがアクティブになっていない・・・ > MsgBox "売掛金はありません。", vbCritical, "入力エラー" > F_EigMainInp!txtKyakName2.SetFocus この2行の順番を逆にしてみるとか・・・

hirorih
質問者

補足

>> F_EigMainInp!txtKyakName2.SetFocus >ここで、エラーってことでしょうか? いいえ、MsgBox "売掛金はありません。", vbCritical, "入力エラー"を入れたらエラーになるんですが、はずせばエラーにはならないんです。 >フォーカスの移動が間に合っていないのでは? >#フォームがアクティブになっていない・・・ これはどう言うことでしょうか? また、そうだとすると、どうすればいいのでしょうか?

関連するQ&A

  • 実行時エラー49 DLLが正しく呼び出せません。

    アクセス2010です。 今まで問題なく動いてたファイルなのですが Call マクロ1(str1, str2) Sub マクロ1(str1, str2) If ○○ Then If Form_F_Form.ck_OK.Value = 0 Then Exit Sub End If と言うところのExit Subで 実行時エラー49 DLLが正しく呼び出せません。 となります。 これはファイルが壊れているのでしょうか?

  • アクセス2000の実行時エラー'-2147352567(80020009)'に関して

    Windows2000にて、先日までエラーの出なかったコードがいきなりエラーになって困っています。 フォーム上で単純なテキストボックスを配置し、入力値の加工用サブルーチンに飛ぶときに、 「Update または CancelUpdate メソッドには、対応する AddNew または Edit メソッドが必要です。」 の実行時エラーが出ます。 テキストボックスの object名 RTrimTest に対するコードは、以下のものだけです。 Private Sub RTrimTest_LostFocus()   If IsNull([RTrimTest]) Then [RTrimTest] = Space$(20)   [RTrimTest] = Left(RTrim([RTrimTest]) & Space$(20), 20) End Sub 実行時のエラーメッセージもなんかスッキリしないのですが、どなたかこの現象に関してご存知の方がいらっしゃいましたら、ご教授ください。

  • 実行時エラー13 型が一致しません。エラー2029

    エクセルです。 A1に「=a」と文字が入っていて、 #NAME? となります。 その状態でvbaで セルA1に「=a」が入っているのなら としたい為、 Sub test() If Cells(1, 1) = "=a" Then End If End Sub こうしたのですが、 実行時エラー13 型が一致しません。 になります。 vba中断中に、Cells(1, 1)の部分にマウスカーソルを当ててみると エラー 2029 となっています。 If Cells(1, 1) = "=a" Then が無理なら、 If Cells(1, 1) = "#NAME?" Then なら行けるかな?と思いましたが、 全く同じエラーになります。 最終的に何がやりたいかと言うと、 Sub test() If Cells(1, 1) = "=a" Then Rows(1).delele End If End Sub のように、#NAME?の場合は、その行を削除したいです。

  • 実行時エラー

    先日はご回答いただきありがとうございました。 ご回答いただいた構文を採用してテストしてみましたところ、特定の操作時にエラーが発生してしまいました。 発生条件:「管理」部署のユーザー・シート3人と「総務」部署のユーザー・シート2人を用意      「管理」の管理職でログインしたあと、「総務」の管理職でログインを試みるとエラーが発生 発生エラー:実行時エラー'1004' 'Visible' メソッドは失敗しました: '_Worksheet' オブジェクト エラー発生箇所:ws.Visible = False(下から4行目) お手すきの時で構いませんので、宜しければご回答お願いいたします。 ElseIf isManage Then '管理職なら Dim i As Integer For i = 1 To login.Cells(Rows.Count, eColIndex.depcode).End(xlUp).Row On Error Resume Next 'エラートラップ開始 Set ws = Sheets(login.Cells(i, eColIndex.name).Value) 'Sheets("氏名") On Error GoTo 0 'エラートラップ終了 If login.Cells(i, eColIndex.depcode).Value = depcode Then If ws Is Nothing Then 'シートが無いなら MsgBox "ユーザーシートがありません", vbExclamation, "警告" Application.Visible = True 'ブックを表示 End End If ws.Visible = True 'ユーザーのシート表示 Set ws = Nothing ElseIf Not ws Is Nothing Then ws.Visible = False Set ws = Nothing End If Next

  • 実行時エラー92 forループが初期化されていませ

    エクセルVBAでFor Eachを使ってるのですが、 Nextの部分で 実行時エラー92 forループが初期化されていません。 というエラーになります。 On Error GoTo ERR1 For Each myObj In objIE.Document.all.tags("ul") If myObj.className = "" Then '○○の場合 Exit Sub ERR1: If Err.Number = 424 Then On Error GoTo 0 'エラーを解除 '▲▲の場合 If strカテゴリ Like "" Then Exit Sub End If End If End If Next というコードなのですが、どこかおかしいですか?

  • VBA実行時のエラー

    下記のプログラムは私が作った物では無いのですが、作った方と連絡をとる事が出来なくなってしまった為、質問させて頂きます。 このプログラムをシートから実行した所 エラー:400『既にフォームは表示されています。モーダルにできません。』 なるものが表示されてしまいます。 またコードを記述する所から実行しますと 実行時エラー:1004『アプリケーション定義またはオブジェクト定義のエラー』 となってしまいます。 私の努力が足りないのは重々承知ですが、解決する事が出来ません。 皆様のお力を借りることが出来たらと思い投稿しました。 宜しくお願い致します。 Sub syoutotumen() Dim i As Long Dim j As Long Dim k As Long Dim kyori As Long Dim n As Integer n = 1 i = 1 j = 1 k = 1 Const cnsYEN = "\" Dim xlAPP As Application Dim objWBK As Workbook Dim strPATHNAME As String Dim strFILENAME As String strPATHNAME = "C:\Documents and Settings\tata41\デスクトップ\画像処理\" If strPATHNAME = "" Then Exit Sub strFILENAME = Dir(strPATHNAME & "dem******", vbNormal) If strFILENAME = "" Then MsgBox "このフォルダにはExcelワークブックは存在しません" Exit Sub End If Set xlAPP = Application With xlAPP .ScreenUpdating = False .EnableEvents = Fales .EnableCancelKey = xlErrorHandler .Cursor = xlWait End With Set WS1 = Worksheets("sheet1") Range("A1") = "0" Range("A2") = "1" Range("A1:A2").Select Selection.AutoFill Destinaton:=Range("A1:A512") Do While strFILENAME <> "" DoEvents If swESC = True Then If MsgBox("ESCが押されました。ここで終了しますか?", vbInformation + vbYesNo) = vbYes Then GoTo Button1_Click_Exit Else swESC = False End If End If xlAPP.StatusBar = trFILENAME & "処理中..." Set objWBK = Workbooks.Open(Filename:=strPATHNAME & cnsYEN & strFILENAME, UpdateLinks:=False, ReadOnly:=True) Do If Cells(i, 2) = 255 Then Exit Do i = i + 1 Loop Do If Cells(j, 3) = 255 Then Exit Do j = j + 1 Loop Do If Cells(k, 4) = 255 Then Exit Do k = k + 1 Loop kyori = (i + j + k - 21) / 3 WS1.Cells(n, 2) = kyori n = n + 1 i = 1 j = 1 k = 1 objWBK.Close savechanges:=False strFILENAME = Dir Loop GoTo Button1_Click_Exit Button1_Click_ESC: If Err.Number = 18 Then swESC = True Resume ElseIf Err.Number = 1004 Then Resume Next Else MsgBox Err.Description End If Button1_Click_Exit: With xlAPP .StatusBar = False .ScreenUpdating = True .EnableEvents = True .EnableCancelKey = xlInterrupt .Cursur = xlDefault Set objWBK = Nothing Set xlAPP = Nothing End With End Sub

  • 関数内でのSQL文実行→エラー検知されない・・・。

    いつもお世話になってます。 sasakidと申します。 現在、ASPで開発を進めています。 エラーが発生したらエラーページに飛ぶように適所に 以下の文を入れています。 '------エラー処理-------- If Err.Number <> 0 Then  Call goto_ErrPage() ←…エラーページに飛ぶ関数 End If ほとんどの個所でエラーページに飛ぶことを確認しました。 今、困っていることはSQL文を実行する関数内で SQL文にエラーがあったとしてもどうやらエラーが検知されていないようなのです。 '=====SQL文実行関数=========== Function exeSql1(sql) exeSql1 = -1 'エラーセット sql = sql & "ORDER BY test" '←…エラーが出るように追加    Set rs = db.Execute(sql) If Err.Number <> 0 Then Set rs = Nothing Exit Function End If (中略) exeSql1 = 0 End Function '======本文================== (中略)   tmp = exeSql1(sql) If tmp <> 0 Then '戻り値がエラー(0以外)だったらエラー画面へ Call goto_ErrPage() ←…エラーページに飛ぶ関数 End If (後略) ------------------------- どんなに関数:exeSql1で実行されるSQL文にエラーを含めてもエラーページに飛びません。 本文中で実行しているSQL文にエラーが含んでいるとエラーページに飛ぶのですが・・・。 こんな現象の原因などわかる方がいらっしゃいましたら教えてください!!! よろしくお願いします。     

  • VBで「”」文字を取り除く方法

    VB6で「”」(全角)があった場合、それを取り除く処理を行ないたいのですが、 うまくいかずエラーの赤色表示になってしまいます。 どのように記述すればうまくいくのでしょうか?教えて下さい。 ちなみに半角の場合は、InStr(wk_kensa, """") でうまくいきました。 以下が、そのエラーとなってしまう部分の記述です。 dim wk_kensa as string, wk_kensa1 as string wk_kensa = "例えば ”を取り除く" If InStr(wk_kensa, "”") > 0 Then wk_kensa1 = Mid(wk_kensa, 1, InStr(wk_kensa, "”") - 1) wk_kensa = wk_kensa1 & Mid(wk_kensa, InStr(wk_kensa, "”") + 1, 50) end if よろしくお願いします。

  • 実行時エラー3021

    実行時エラー3021「BOFとEOFのいずれかTRUEになっていか、または現のレコード要求された操作には、現在のレコードが必要です。」 というエラーが発生します。 エラーになるコードの一部を掲載します。 コードの内容は、アクセスのT_店名テーブルで、str店名の値同じレコードの地図フィールドの値を取得する内容です。 地図フィールドがnullなら何も取得しないようにifステートメントで分けています。 ------------------------------------------------------------ str店名="abc会社" rs.Open "SELECT * FROM T_店名", cn, adOpenStatic, adLockPessimistic rs.Filter = "店名 = '" & str店名 & "'" If IsNull(rs("地図")) = True Then Else ’ここでエラーになる str地図 = rs("地図") End If rs.Close: Set rs = Nothing ------------------------------------------------------------ "abc会社"は、コード上(VBA上) IsNull(rs("地図")) = True では、Falseになってしまい、 str地図 = rs("地図") でエラーになります。 目で見た限り "abc会社"は、T_店名テーブルに存在しますし、 地図フィールドはNullっぽいです。 なのになぜ If IsNull(rs("地図")) = True Then で、True にならないのでしょうか? True にならないために、 str地図 = rs("地図") で、実行時エラー3021というエラーになってしまうようです。

  • VBA 実行時エラー'1004' オートフィルタ

    お世話になります。Excel2003を使っております。 初歩的なことかもしれませんが、 原因がよくわかっていないため、教えて下さい。 フォームにあるコンボボックスのデータ 特定のシートの絞り込みを行います。 '========================= If ComboBox1 <> "" Then '空じゃないときに実行 With ThisWorkbook.Worksheets("データ") .Select .Range("A1").Select .Range("A1").AutoFilter Field:=ThisWorkbook.Worksheets("データ").Range("E1").Column, _ Criterial:=Me.ComboBox1.Text End With End if '========================= 上記のようなプログラムを書いてみましたが、 何故かエラーが出ます。 このような書き方ではまずいのでしょうか? 前までは、 '========================= Worksheets("データ").Select '基データを選択 If ComboBox1.Text <> "" Then '製品名が空じゃない場合 Selection.AutoFilter Field:=Range("E1").Column, _ Criteria1:=ComboBox1.Text End If '================== 上記の方法で行っていました。(上手くいっていました。) SELECT(Selection)を使うのはあまり良くないと聞いたため このようにWithを使って書いているのですが 実行時エラー '1004' アプリケーション定義またはオブジェクト定義のエラーです。 と出ます。 回答よろしくおねがい致します。

専門家に質問してみよう