• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAに「maqBox」を追加したい)

VBAで「maqBox」を追加!検索結果フォームに「指定したレコードはありません」と表示する方法

このQ&Aのポイント
  • Access2007のフォーム「未来」にコマンドボタンのイベントを追加する方法をご教示いたします。メッセージボックスに「指定したレコードはありません」と表示させることができます。
  • VBAの知識がない方でも簡単に実装できます。検索結果フォームのレコード数に応じてメッセージが表示される仕組みです。
  • 具体的な手順とコードの説明を記載しています。お使いのAccess2007でお試しください。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

No3の続きです。 Private Sub コマンド17_Click()   Me.Recordset.MovePrevious   If Recordset.BOF Then     MsgBox "最初のレコードにいます。すなわち指定したレコードはありません。"     Recordset.MoveFirst   End If End Sub これはNo3とは考え方が違うのですが。 じつはフォーム上の最初のレコードにいるときは BOFはすでにFalseになっています。なので    DoCmd.GoToRecord を使うと最初のレコードにいるときにはエラー がでてしまいます。 なお、No3は私の書いたコードそのままで 確認してください。たとえば、 If Me.Recordset.RecordCount > 1 Then というような条件設定はしていません。これは また意味合いがちがってきますので。

eokwave
質問者

お礼

有難うございます。多くの方からアドバイスを頂来ました。最初の質問の仕方に反省が残ります。コマンドボタンでレコードを次へ送れば、戻る作業が発生する可能性は大なので、送ると戻るの両方を記載し質問すべきでした。申し訳ございません。

その他の回答 (3)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2です。 面倒なエラーはスルーというのであれば、 Private Sub コマンド17_Click()  On Error Resume Next とすればいいのですが、メッセージを出したい というのであれば、 Private Sub コマンド17_Click()   On Error GoTo ER   If Me.Recordset.RecordCount > 0 Then     If Me.CurrentRecord < Me.Recordset.RecordCount Then       DoCmd.GoToRecord acDataForm, Me.Name, acPrevious     End If   Else     MsgBox ("レコードがありません")   End If ER:   If Err.Number = 2105 Then   MsgBox ("指定したレコードはありません")   End If End Sub あるいは、ER: のところを ER:   Select Case Err.Number   Case 2105     MsgBox ("指定したレコードはありません")   Case Else     MsgBox Err.Number & ":" & Err.Description, vbOKOnly, "エラーです"   End Select なお、 If Me.Recordset.RecordCount > 0 Then としているのは、フォームのレコードソースに レコードが存在するかどうかの判定です。 MsgBox ("レコードがありません") というのはレコードが一件もないと言う意味です。 ちなみにわたくしはpiroin654でございます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

Private Sub コマンド27_Click()   If Me.Recordset.RecordCount > 0 Then     If Me.CurrentRecord < Me.Recordset.RecordCount Then       DoCmd.GoToRecord acDataForm, Me.Name, acNext     Else       MsgBox ("指定したレコードはありません")     End If   Else     MsgBox ("レコードがありません")   End If End Sub では? なお、 >実行時エラー’2105’ >指定したレコードに移動出来ません。 というのは、EOF、またはBOFを検出してレコードがないという Accessからの伝言です。

eokwave
質問者

補足

seastar3 レベル11様へ様へ アドバイスを有難うございます。 「次へ(後)」のコマンドボタンへの記述は問題なく動きました。「質問」の内容記述だとこれでアドバイスは正解になります。私のミスですが、「次へ(後)」の移動とメッセージの表示が完成すれば、若干の手直しで 「戻る(前)」は可能かと考えました。しかし、やってみますと「戻る(前)」が上手く動きません。 ご面倒をお掛けしますが、下記の「戻る(前)」の記述でアドバイスをお願いできませんでしょうか。 「次へ(後)」は問題なく稼働 Private Sub コマンド17_Click() If Me.Recordset.RecordCount > 0 Then If Me.CurrentRecord < Me.Recordset.RecordCount Then DoCmd.GoToRecord acDataForm, Me.Name, acNext  Else MsgBox ("レコードがありません") End If Else MsgBox ("レコードがありません") End If End Sub 「戻る(前)」は問題が発生 問題の内容:移動件数分のレコードを戻らずにクリックした途端に、ダイアログボックスで「レコードがありません。」とダイアログメッセージがでます。 Private Sub コマンド16_Click() If Me.Recordset.RecordCount > 1 Then If Me.CurrentRecord < Me.Recordset.RecordCount Then DoCmd.GoToRecord acDataForm, Me.Name, acPrevious   Else MsgBox ("レコードがありません") End If  Else   MsgBox ("レコードがありません") End If End Sub 以上ですが、宜しくお願いします。

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

テーブルとフォームの仕様がよく分かりませんが、形だけ整えてみると 以下のようなコードになります。 Private Sub コマンド27_Click() If Me.Recordset.RecordCount > 0 Then DoCmd.GoToRecord acDataForm, Me.Name, acNext Else   MsgBox ("指定したレコードはありません") End If End Sub

eokwave
質問者

補足

seastar3 レベル11様へ 早速、アドバイスを頂きまして、有難うございます。アドバイス記述に書き換えてみました結果をご報告させていただきます。 ■記載記述(書き換え) Private Sub コマンド27_Click() If Me.Recordset.RecordCount > 0 Then DoCmd.GoToRecord acDataForm, Me.Name, acNext Else   MsgBox ("指定したレコードはありません") End If End Sub ■エラーダイアログが表示 実行時エラー’2105’ 指定したレコードに移動出来ません。 デバッグ(D)を選択するとVBA記述ページへ移動し、次のの記述部分「DoCmd.GoToRecord acDataForm, Me.Name, acNext」が「黄色」マスクになっています。 --------------------------------------------------------------------------------- [質問の「次へ」のアドバイスを参考に「戻る(前へ)も記述を変更してみました」] ちなみにレコード「前へ」を移動させるコマンドボタンのイベントのVBA記述もアドバイスを参考に 以下の通り書き直してみました所。 ◆エラーダイアログが表示 実行時エラー’2105’ 指定したレコードに移動出来ません。 デバッグ(D)を選択するとVBA記述ページへ移動し、次のの記述部分「DoCmd.GoToRecord acDataForm, Me.Name, acPrevious」が「黄色」マスクになっています。 Private Sub コマンド28_Click() If Me.Recordset.RecordCount > 1 Then DoCmd.GoToRecord acDataForm, Me.Name, acPrevious Else MsgBox ("指定したレコードはありません") End If End Sub ◆[戻る(前へ)の変更前の記述] Private Sub コマンド28_Click() If Me.CurrentRecord > 1 Then DoCmd.GoToRecord acDataForm, Me.Name, acPrevious End If End Sub 以上ですが、ご面倒をお掛けしますが宜しくお願いします。

関連するQ&A