アクセス小僧:レコード番号とレコード数(2) [コンピューター]
http://cheese999.blog.so-net.ne.jp/2017-07-27-2
で、CurrentRecordとDCountを使用して、フォームで開いているテーブルのレコード番号とレコード数を表示するマクロを紹介しました。
今回は、
・現在開いているテーブルのレコード数⇒RecordCount
・開いているレコードの番号⇒CurrentRecord
としたマクロを作ってみました。再クエリ(Requery)を行った後にレコード番号(CurrentRecord)とレコード数(RecordCount)を表示させます。
・再クエリ(Requery)前にBookmarkを退避して、再クエリ(Requery)後に戻しているのは、再クエリ(Requery)で先頭レコードに移動してしまうからです。
・再クエリ(Requery)後、最終レコードへ移動(MoveLast)、先頭レコードへ移動(MoveFirst)を実行していますが、これをしないと、RecordCountが1になってしまい、レコード数が正しく表示できません。
・このマクロを流用するときは、OpenRecordsetの"T_テーブル名"を開いているテーブル名で置換します。
Private Sub 再クエリ_Click()
'【機能】再クエリ
On Error GoTo ERR1
'【引数】
' なし
'【変数】
Dim db1 As DAO.Database ' データベース
Dim rs1 As DAO.Recordset ' レコードセット
Dim varBookMark As Variant ' ブックマーク
' 【コード】
' パスワード管理テーブルをレコードセットとして開く
Set db1 = CurrentDb()
Set rs1 = db1.OpenRecordset("T_テーブル名", dbOpenDynaset)
'レコードセットのブックマーク(再クエリ前のカレントレコード)を取得
varBookMark = rs1.Bookmark
rs1.Requery ' 再クエリ
rs1.MoveLast ' 最終レコードへ
rs1.MoveFirst ' 先頭レコードへ
'カレントレコードを保存されているブックマークに設定
rs1.Bookmark = varBookMark
MsgBox ("CurrentRecord=" & CurrentRecord & "/" & rs1.RecordCount)
[Record_No1] = CurrentRecord & "/" & rs1.RecordCount
'レコードセット、データベース変数の解放
Set rs1 = Nothing
Set db1 = Nothing
'Subを抜ける
Exit Sub
ERR1:
MsgBox ("エラー" & vbCrLf & Err.Description)
'レコードセット、データベース変数の解放
Set rs1 = Nothing
Set db1 = Nothing
End Sub
で、CurrentRecordとDCountを使用して、フォームで開いているテーブルのレコード番号とレコード数を表示するマクロを紹介しました。
今回は、
・現在開いているテーブルのレコード数⇒RecordCount
・開いているレコードの番号⇒CurrentRecord
としたマクロを作ってみました。再クエリ(Requery)を行った後にレコード番号(CurrentRecord)とレコード数(RecordCount)を表示させます。
・再クエリ(Requery)前にBookmarkを退避して、再クエリ(Requery)後に戻しているのは、再クエリ(Requery)で先頭レコードに移動してしまうからです。
・再クエリ(Requery)後、最終レコードへ移動(MoveLast)、先頭レコードへ移動(MoveFirst)を実行していますが、これをしないと、RecordCountが1になってしまい、レコード数が正しく表示できません。
・このマクロを流用するときは、OpenRecordsetの"T_テーブル名"を開いているテーブル名で置換します。
Private Sub 再クエリ_Click()
'【機能】再クエリ
On Error GoTo ERR1
'【引数】
' なし
'【変数】
Dim db1 As DAO.Database ' データベース
Dim rs1 As DAO.Recordset ' レコードセット
Dim varBookMark As Variant ' ブックマーク
' 【コード】
' パスワード管理テーブルをレコードセットとして開く
Set db1 = CurrentDb()
Set rs1 = db1.OpenRecordset("T_テーブル名", dbOpenDynaset)
'レコードセットのブックマーク(再クエリ前のカレントレコード)を取得
varBookMark = rs1.Bookmark
rs1.Requery ' 再クエリ
rs1.MoveLast ' 最終レコードへ
rs1.MoveFirst ' 先頭レコードへ
'カレントレコードを保存されているブックマークに設定
rs1.Bookmark = varBookMark
MsgBox ("CurrentRecord=" & CurrentRecord & "/" & rs1.RecordCount)
[Record_No1] = CurrentRecord & "/" & rs1.RecordCount
'レコードセット、データベース変数の解放
Set rs1 = Nothing
Set db1 = Nothing
'Subを抜ける
Exit Sub
ERR1:
MsgBox ("エラー" & vbCrLf & Err.Description)
'レコードセット、データベース変数の解放
Set rs1 = Nothing
Set db1 = Nothing
End Sub
ヤバイぜ! ありがとうございます[__猫]
by cheese999 (2017-07-30 11:48)
お早うございます、諏訪湖にコメントを有難うございました。
湖畔には亀が乗った、遊覧船が停泊していました、
珍しかったのでパチリでした。
私には難し過ぎて、理解できないのが残念です(~_~)
勉強してみたいですが、どこから手をつけたら
良いのかな・・・・、です。
by tarou (2017-07-31 06:46)
tarouさん、
コメントありがとうございます。
やっぱり難しかったですか。。
タイトルに「小僧」と付けたのは、できる限り簡単にという思いで始めたのですが、アクセスとか、VBAとか、なじみのない方からすると、かなり難しい、ということが分かりました。
本屋さんに行くと、アクセスの本なんて、ワード、エクセル、パワーポイントに比べると全然少ないし、一番簡単、と書かれている本を買ってきて、アクセスでデータベースを作ってみたものの、未だによくわかっておりません。
分からないなりに、他人様の作ったマクロ(プログラム)を参考に、試行錯誤した結果、何とか使えそうなものができたとき、このブログで紹介させてもらっています。
コンピュータって、登場してから、何年たったか分かりませんが、「使えなければ、タダの箱」から成長していないなあ、と思っています。
もし、何がやりたいのか、コメントいただければ、何かアドバイスできるかも、しれません。
by cheese999 (2017-08-01 05:20)