VB5
WIN2000 です。
おはようございます。初心者の質問で申し訳ありませんが、宜しくご指導頂きたいと思います。
MsgBoxの質問です。顧客管理表を作っていますが、存在しない顧客番号等を検索をした時に
《実行時エラー'3021':
カレントレコードがありません》
というエラーが出ます。これを、 MsgBoxで、「データーは存在しません。」という感じで表示できるようにするには、どのようなコードを書けばいいでしょうか?
ちなみに今は、データを抽出できた時に
rs.MoveNext
If rs.EOF Then
MsgBox "(^ω^)Already at end of recordset!"
rs.MoveLast
Exit Do
End If
Loop
というメッセージを出すようにしてます。
これの後に続くコードとしては、どのような感じにすれば・・?
BOFとかも考えたのですが、さっぱりうまく動きません・・。
どうかご指導宜しくお願いします。
No.6
- 回答日時:
追記です。
質問文のコードは使いませんので、
削除してください。
>これの後に続くコードとしては、どのような感じにすれば・・?
については、
先ほども言ったとおり、業務ロジックですので
こちらで教えることは出来ません。
皆さんが教えてくれているのは以下の内容です。
If データが取得できない時
⇒エラーメッセージ
else データが取得できた時
先頭レコードに移動
ループ開始
--顧客管理表出力処理(1行出力)--
次のデータに移動
ループここまで
メッセージ「(^ω^)Already at end of recordset!」
If文終了
もちろん、このロジックの前にレコードセット取得、
ロジック後にはレコードセット解放、
と各処理が記述されていることが前提です。
すごい!すごい!すごいです!
ご指導通りにしてみると、出来ましたーーー!泣
とっても感激です!
理解力がなく恥ずかしいほど馬鹿な自分にめちゃくちゃ親切にご指導いただけたこと、本当に感謝します!
ありがとうございましたーーー!
If rs.EOF Then
MsgBox "データーは存在しません。"
Else
rs.MoveFirst
Do Until rs.EOF
List1.AddItem rs.Fields("顧客TBL.顧客ID") & String((18 - Len(rs.Fields("顧客TBL.顧客ID"))), " ") _
& rs.Fields("顧客かな") ・・・・・
rs.MoveNext
Loop
MsgBox "(^ω^)Already at end of recordset!"
End If
これでバッチリです☆あとはこのコードを参考書見ながら復習して理解を深めます。ありがとうございました。
No.5
- 回答日時:
見当違いならすいません。
検索後すぐに rs.MoveNext を実行しているのではないでしょうか?
それならば rs.MoveNext 実行時にエラーが発生してしまいます。
~検索処理~
If (rs.EOF) then
MsgBox ("対象データなし")
exit sub '<-以下の処理は行わない
End If
といった対象データが存在するか確認する処理が必要になります。
また、
>>rs.MoveNext
>>If rs.EOF Then
>>MsgBox "(^ω^)Already at end of recordset!"
>>rs.MoveLast
>>Exit Do
>>End If
>>Loop
プログラムを見る限りではEOFを判断するIF~End IF内で rs.MoveLast を行っていますが、データが存在しな状態で最終レコードに移動しようとすると、エラーが発生する気がしますが・・・
ご指導、まことにありがとうございます!
無事にできまして、上↑の通りです。_tomo_さんのご指摘の通りでした!(・・よね?)
詳しく書いていただきまして、本当にありがとうございました!
No.4
- 回答日時:
補足見ました。
ダメですよ。必要な部分は教えてくれないと。
他の方の補足も見ましたが、
教えた部分以外にDoが残ってるんですよ。
質問文にもそのDoは記述されていませんし。
レコードセットを取得しているところのすぐ次の行に
さっきのコードを書いてください。
必要な処理ってのは、
顧客管理表を出力する処理です。
こればっかりは教えられません。。。
この回答への補足
ありがとうございます!
色々すみません・・。申し訳ないかぎりです、。
DOありました!顧客管理表を出力する処理の前に!!
で、今ご指導とおりにやってみてますが、
VB画面が今固まってしまいまして、ちょっと時間かかると思いますのでまたお昼後にご報告します!
No.3
- 回答日時:
ループに入る前に
If rs.BOF Then
MsgBox "該当データなし", vbExclamation + vbOkOnly, "顧客番号エラー"
Else
rs.MoveFirst
While Not rs.EOF
主処理
Loop
End If
※この後は、該当データ無の場合とデータありの場合に異なる処理をしたいのなら前述のIf文で該当データ有無フラグを作成し処理を分岐する。
BOFを巧く拾えない場合は、On Errpr Resume Nextを使用して、エラーが発生する次の行でエラーコードを調べて、ループさせるか処理を中断させるかを判断させます。
エラーコードですが、使用するDBにより調べる方法が異なりますので、ヘルプで調べてください。
AccessのMDBをDAOで使用した場合、私は前述したBOFで巧くいっています。
この回答への補足
迅速な対応ありがとうございます!
やってみたのですが、LOOPに対するDOがありません・・というエラーがでます・・。あ、ちなみにこちらも、アクセスMDBとDAOでやっています。
rs.MoveNext
If rs.EOF Then
MsgBox "(^ω^)Already at end of recordset!"
rs.MoveLast
Exit Do
End If
If rs.BOF Then
MsgBox "該当データなし", vbExclamation + vbOKOnly, "顧客番号エラー"
Else
rs.MoveFirst
While Not rs.EOF
Exit Do
Loop
End If
No.2
- 回答日時:
カレントレコードのエラーは1行目の
rs.MoveNext
ででています。
レコードが取得できないのだから当たり前です。
以下のようにしてください。
If rs.EOF Then
MsgBox "データーは存在しません。"
Else
rs.MoveFirst
Do Until rs.EOF
--何らかの処理--
rs.MoveNext
Loop
MsgBox "(^ω^)Already at end of recordset!"
End If
この回答への補足
迅速なご対応ありがとうございます!
やってみましたが、DOに対するLOOPがありません、のエラーがでます、。
しかも怒られると思いますが、「何らかの処理」のところに何を書けばいいかわからずです・・。すみません・・。
No.1ベストアンサー
- 回答日時:
On Error GoTo ErrorHandler
rs.MoveNext
If rs.EOF Then
MsgBox "(^ω^)Already at end of recordset!"
rs.MoveLast
Exit Do
End If
Loop
Exit Sub
ErrorHandler:
MsgBox "データは存在しません。"
では、どうでしょうか?
確認も何もしてませんが。。
この回答への補足
ご指導ありがとうございます!
やってみましたが、データーを出すのにはきちんと"(^ω^)Already at end of recordset!"が出てエラーなくいきますが、
存在しなデーターを検索すると、カレントコードがありません、のエラーになり、このMsgBoxコードの前にある、rs.MoveLast が黄色で反転されできませんでした・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どうやってもFor文を抜けてしま...
-
IF文に時間(何時から何時ま...
-
【C#/Java?】try-catchでcatch...
-
iPhoneのニューラルエンジンっ...
-
特定の名前のオートシェイプの...
-
Excel VBA セルの名前があるか...
-
VB6にてネットワーク上にある共...
-
StatusStripの表示が更新されな...
-
エクセルVBAでロックをかけたい
-
ListViewから選択中の文字列を取得
-
特定のファイルを他のプロセス...
-
vbaのエラー対応(実行時エラー...
-
UWSCのTHREADについて
-
決まった時刻に処理を行いたい
-
Functionで戻り値を複数返す方法
-
C++ Builder6.0 TNMFTPコンポー...
-
C# 指定時間(秒間)の間処理を...
-
VBAの進捗状況をリアルタイ...
-
検索サイトで、検索結果に広告...
-
Windows APIのメソッドをPInvok...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
特定の名前のオートシェイプの...
-
シグナル 6(SIGABRT)とは?
-
特定のファイルを他のプロセス...
-
ExcelのVBAで、選択したファイ...
-
Excel VBA セルの名前があるか...
-
どう増強すべきか
-
Word VBA。各マクロの間に待ち...
-
【VBA】エラー処理で別プロシー...
-
UWSCのTHREADについて
-
シェルスクリプトでファイル内...
-
ドリブン??
-
Functionで戻り値を複数返す方法
-
iPhoneのニューラルエンジンっ...
-
エクセル VBAで複数セル選択時...
-
COBOL OCCURSで指定したデータ...
-
どうやってもFor文を抜けてしま...
おすすめ情報