Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7全般 : Access 2010)
gotorecordで指定の値のレコードに移動したい
投稿日時: 19/05/24 17:28:42
投稿者: 滝沢

日付    商品
2019/05/22 みかん
2019/05/23 れもん
2019/05/24 りんご
2019/05/25 めろん
2019/05/26 すいか
 
こんなテーブルをソースにしたフォームがあります。
今日(5/24)開いたら「りんご」と
明日(5/25)開いたら「めろん」と
表示されるようにしたいです。(日付フィールドはユニークです)
 
acGoToの使い方がヘルプを読んでもよくわからなくて、想像で下記の2つを試してみましたが
どちらもエラーになってしまいます。
DoCmd.GoToRecord acDataForm, , acGoTo, "日付 like " & Date()
DoCmd.GoToRecord acDataForm, 日付, acGoTo, Date()
 
このようなことはできないのでしょうか?
よろしくお願い致します。

回答
投稿日時: 19/05/24 18:00:44
投稿者: sk

引用:
こんなテーブルをソースにしたフォームがあります。
今日(5/24)開いたら「りんご」と
明日(5/25)開いたら「めろん」と
表示されるようにしたいです。(日付フィールドはユニークです)

引用:
DoCmd.GoToRecord acDataForm, , acGoTo, "日付 like " & Date()

DoCmd.SearchForRecord acDataForm, Me.Name, acLast, "[日付]<=Date()"
 
-------------------------------------------------------------
 
もし[日付]の値がシステム日付と一致するレコードが
存在しなかった場合は、システム日付より前の日付で
最も近いものが設定されているレコードに移動します。
 
引用:
acGoToの使い方がヘルプを読んでもよくわからなくて、
想像で下記の2つを試してみましたが
どちらもエラーになってしまいます。

・そもそも GoToRecord メソッドでは Where 条件を指定出来ない。
 
・GoToRecord メソッドの第 4 引数 Offset に指定するのは、
 「何件前/後ろのレコードに移動するか」または
 「何番目のレコードに移動するか」を示す数値(を返す式)である。
 ( Offset に渡された数値をどう解釈するかは、
  第 3 引数 Record に渡された値で決まる)

回答
投稿日時: 19/05/24 18:01:55
投稿者: hatena
投稿者のウェブサイトに移動

GoToRecord はレコード位置(前レコード、次レコード、先頭レコード、最終レコード、など)で移動先を指定するものです。
 
今回したいことは、検索による移動ですよね。
指定した値(今日の日付)を検索して移動ということですので、FindRecord メソッドを使ってください。
 
https://docs.microsoft.com/ja-jp/office/vba/api/access.docmd.findrecord
 
Me.日付.SeFocus '検索対象テキストボックスに移動する
DoCmd.FindRecord Date()
 
 
別案
フォームの Recordset の FindFirstメソッド を使う
 
Me.Recordset.FindFirst "日付=#" & Date() & "#"

回答
投稿日時: 19/05/24 18:32:27
投稿者: sk

補足:

引用:
DoCmd.SearchForRecord acDataForm, Me.Name, acLast, "[日付]<=Date()"

引用:
もし[日付]の値がシステム日付と一致するレコードが
存在しなかった場合は、システム日付より前の日付で
最も近いものが設定されているレコードに移動します。

なお、上記の動作はあくまで「フォームのレコードが
[日付]の昇順に並べ替えられている場合」の動作である、
という点にご留意ください。
 
レコードの並び順が[日付]に対して順不同になっている場合は、
「[日付]の値がシステム日付以前の日付であるレコード」に該当する、
フォーム上における最後のレコードに移動されることになります。
 
システム日付と一致するレコードに移動させたい場合は
<= 演算子ではなく = 演算子で比較するようにして下さい。

投稿日時: 19/05/24 19:49:26
投稿者: 滝沢

sk様、hatena様
コメントありがとうございます。
 
2つの方法両方試しましたが、どちらもバッチリ動きました。
大変ありがとうございます。