プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (9件)

> 元の現象


> は発生します。
> On Errorを最初の行に入れましたが、同じ現象です。

そうですか・・・と言うことは、
「システムのエラー処理自体がおかしくなっている」か、
「(何故か)全然関係ない箇所でエラーが発生している」か、
どちらかでしょうね。

前者なら、私にはお手上げ(「MsgBoxを使うのをあきらめる?」ぐらいしか提案できません)、
後者なら・・・「全コード(全プロシージャ)に、同様に「On Error」と「行ラベル」を入れてみて、実際のエラー発生箇所を探す」ぐらいしか無いと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/14 15:41

★追記。


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

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

お礼日時:2007/02/14 15:47

★1つだけアドバイス


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

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

この回答への補足

MsgBoxだけでも同じ現象です

補足日時:2007/02/13 17:53
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/14 15:45

> On Errorにもひっかからず、エラーメッセージは出ませんでした。



元の現象
> メッセージボックスが表示される前にエラーが出ます。
> その後、エラーを閉じると、メッセージボックスが表示され、
> メッセージボックスを閉じると、プログラムが終了します。

は、発生したんでしょうか?それとも、コレも発生しなくなった?

発生するなら・・・
別の箇所でエラーの可能性がありますが・・・

「On Error」はSub(Function?)の最初の方に入れたんでしょうか?
#違う場合、「On Error」をSubの最初の行として入れても同じでしょうか?

#コレで駄目となら・・・申し訳ありませんが、私はGiveUpです・・・

この回答への補足

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

On Errorを最初の行に入れましたが、同じ現象です。

補足日時:2007/02/13 16:39
    • good
    • 0

1つ確認するのを忘れていました。



「MsgBox」って言う名前の関数とかを、作ってませんよね?

#まず無いとは思いますが、念の為。
    • good
    • 0

> メッセージボックスが表示される前にエラーが出ます。


> その後、エラーを閉じると、メッセージボックスが表示され、
> メッセージボックスを閉じると、プログラムが終了します。

完全に想定外の動作・・・私の手に負えないかも・・・

#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
----------------------------------------------------------
で、どのタイミングで、エラーメッセージがでるか教えてください。

この回答への補足

On Errorは書いていません。
ご指示の通りにしましたが、何も変わりません。

On Errorにもひっかからず、エラーメッセージは出ませんでした。

MsgBox という関数は作っていません。

補足日時:2007/02/13 15:58
    • good
    • 0

> いいえ、MsgBox "売掛金はありません。

", vbCritical, "入力エラー"を
> 入れたらエラーになるんですが、
> はずせばエラーにはならないんです。

つまり、「メッセージボックスが表示されない表示する前にエラーになる)」ってことでしょうか?
それとも、「メッセージボックスは表示されるが、メッセージボックを閉じた後にエラーになる」ってことでしょうか?

後者なら、「MsgBox」の次の行、
つまり「F_EigMainInp!txtKyakName2.SetFocus」でエラーになったのかもしれません。
ちなみに、私は、後者のつもりで回答しました。

#念の為お尋ねしますが・・・「どの行がエラーか」確認してますか?
#デバッグしてますか?

> また、そうだとすると、どうすればいいのでしょうか?

もしそうなら、

> > MsgBox "売掛金はありません。", vbCritical, "入力エラー"
> > F_EigMainInp!txtKyakName2.SetFocus
> この2行の順番を逆にしてみるとか・・・

こうするだけで直る可能性がありますけど・・・

#これで、直らない&デバッグしていない場合、デバッグしてみてください。
#デバッグのやり方がわからないなら、お尋ねください。

この回答への補足

メッセージボックスが表示される前にエラーが出ます。
その後、エラーを閉じると、メッセージボックスが表示され、
メッセージボックスを閉じると、プログラムが終了します。

> > MsgBox "売掛金はありません。", vbCritical, "入力エラー"
> > F_EigMainInp!txtKyakName2.SetFocus
> この2行の順番を逆にしてみるとか・・・

逆にしてみましたが、エラーになります。

デバッグのやりかたを教えていただけますでしょうか。

補足日時:2007/02/13 13:22
    • good
    • 0

> F_EigMainInp!txtKyakName2.SetFocus


ここで、エラーってことでしょうか?

フォーカスの移動が間に合っていないのでは?
#フォームがアクティブになっていない・・・

> MsgBox "売掛金はありません。", vbCritical, "入力エラー"
> F_EigMainInp!txtKyakName2.SetFocus
この2行の順番を逆にしてみるとか・・・

この回答への補足

>> F_EigMainInp!txtKyakName2.SetFocus
>ここで、エラーってことでしょうか?

いいえ、MsgBox "売掛金はありません。", vbCritical, "入力エラー"を入れたらエラーになるんですが、はずせばエラーにはならないんです。

>フォーカスの移動が間に合っていないのでは?
>#フォームがアクティブになっていない・・・
これはどう言うことでしょうか?
また、そうだとすると、どうすればいいのでしょうか?

補足日時:2007/02/13 12:33
    • good
    • 0

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