こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAに「maqBox」を追加したい

検索結果フォーム「未来」を開くフォーム「マスター」に配した、コマンドボタンのイベントに下記の記述「OKWaveで過去にアドバイス頂いた」をしています。この記述に「("指定したレコードはありません")」を表示させたいと思います。WEBを参照したりしてやってみましたが上手く出来ませんでした。

ツール:Access2007
フォーム名:未来

Private Sub コマンド27_Click()
If Me.CurrentRecord < Me.Recordset.RecordCount Then
DoCmd.GoToRecord acDataForm, Me.Name, acNext
End If
End Sub

[やってみたこと「VBA知識なし」]
Private Sub コマンド27_Click()
If Me.CurrentRecord < Me.Recordset.RecordCount Then
DoCmd.GoToRecord acDataForm, Me.Name, acNext
End If
  MsgBox ("指定したレコードはありません")
End Sub

上記の書込だと検索結果のレコードの数だけ移動時にメッセージが出る。

以上ですが、宜しくお願いします。

投稿日時 - 2017-03-25 18:05:35

QNo.9309335

困ってます

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

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

というような条件設定はしていません。これは
また意味合いがちがってきますので。

投稿日時 - 2017-03-27 10:54:58

お礼

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

投稿日時 - 2017-03-27 13:13:21

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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でございます。

投稿日時 - 2017-03-27 10:06:35

ANo.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からの伝言です。

投稿日時 - 2017-03-26 10:57:19

補足

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


以上ですが、宜しくお願いします。

投稿日時 - 2017-03-26 20:50:52

ANo.1

テーブルとフォームの仕様がよく分かりませんが、形だけ整えてみると
以下のようなコードになります。

Private Sub コマンド27_Click()
If Me.Recordset.RecordCount > 0 Then
DoCmd.GoToRecord acDataForm, Me.Name, acNext
Else
  MsgBox ("指定したレコードはありません")
End If
End Sub

投稿日時 - 2017-03-26 00:50:53

補足

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


以上ですが、ご面倒をお掛けしますが宜しくお願いします。

投稿日時 - 2017-03-26 06:58:06

あなたにオススメの質問