- ベストアンサー
VBAで「maqBox」を追加!検索結果フォームに「指定したレコードはありません」と表示する方法
- Access2007のフォーム「未来」にコマンドボタンのイベントを追加する方法をご教示いたします。メッセージボックスに「指定したレコードはありません」と表示させることができます。
- VBAの知識がない方でも簡単に実装できます。検索結果フォームのレコード数に応じてメッセージが表示される仕組みです。
- 具体的な手順とコードの説明を記載しています。お使いのAccess2007でお試しください。
- みんなの回答 (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 というような条件設定はしていません。これは また意味合いがちがってきますので。
その他の回答 (3)
- piroin654
- ベストアンサー率75% (692/917)
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)
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からの伝言です。
補足
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)
テーブルとフォームの仕様がよく分かりませんが、形だけ整えてみると 以下のようなコードになります。 Private Sub コマンド27_Click() If Me.Recordset.RecordCount > 0 Then DoCmd.GoToRecord acDataForm, Me.Name, acNext Else MsgBox ("指定したレコードはありません") End If End Sub
補足
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 以上ですが、ご面倒をお掛けしますが宜しくお願いします。
お礼
有難うございます。多くの方からアドバイスを頂来ました。最初の質問の仕方に反省が残ります。コマンドボタンでレコードを次へ送れば、戻る作業が発生する可能性は大なので、送ると戻るの両方を記載し質問すべきでした。申し訳ございません。