
フォームを閉じるときに表示していたレコードを次回開くときにも表示させたいのです。
データにはIDをふっているのですが、レコードの番号と同じではなく、フォームを閉じるときにIDを記録するテーブルを作成して次回オープン時に呼び出そうとしたのですが、GoToRecord を使うのではうまくいかないでしょうか?
フォームを閉じるときは下のように作りました
Private Sub Form_Close()
Dim cat As ADOX.Catalog
Dim tb As ADOX.Table
Set cat = New ADOX.Catalog
cat.ActiveConnection = CurrentProject.Connection
Set tb = New ADOX.Table
tb.Name = "T最終閲覧"
tb.Columns.Append "ID", adInteger
cat.Tables.Append tb
Set cat = Nothing
ここに
.AddNew
![ID] = [Forms]![フォーム名]![ID]
.Update
としています。
このデータをオープン時に生かすことができず、詰まっています
レコード番号自体を記録することがきるかもわからず、どんどん後回しになってしまって何時まで経っても完成しません。
何かヒントでも構いませんのでご教授いただければと思います。
No.4ベストアンサー
- 回答日時:
Docmd.gotorecord の Offset で指定するのは、マズイ気がします。
1・フォームでフィルターを掛けたまま閉じた場合、
(フォームのデザインで『読み込み時にフィルターを適用』になっていれば良いかな?)
2・テーブルやクエリで色々と変更した場合
3・IDが連番で無くて欠番が有った場合
など。
決して自説を押しつけるわけではありませんが、一応考えたのを。
以下を標準モジュールに(テーブルが無い場合には作成されるように)
Function chkTable()
Dim catADOX As ADOX.Catalog
Dim Tbl As ADOX.Table
Set catADOX = New ADOX.Catalog
catADOX.ActiveConnection = CurrentProject.Connection
For Each Tbl In catADOX.Tables
If Tbl.Name = "T最終閲覧" Then
Set catADX = Nothing
Exit Function
End If
Next
Set Tbl = New ADOX.Table
Tbl.Name = "T最終閲覧"
With Tbl.Columns
.Append "IDNo", adInteger '長整数型
.Append "FormName", adVarWChar, 10 'フォーム名長10文字
End With
catADOX.Tables.Append Tbl
Set Tbl = Nothing
Set catADX = Nothing
End Function
フォームの、Open時イベントに
Dim recID As Long
Call chkTable
recID = Nz(DLookup("IDNo", "T最終閲覧", "formName = '" & Me.Name & "'"), 0)
If recID = 0 Then
MsgBox "前回のレコード位置を特定できませんでした。"
End If
Me.Recordset.FindFirst "ID =" & recID
フォームの、UnLoad時イベントには
Dim sSQL As String
Call chkTable 'うっかり野郎対策でこっちにも
If DCount("*", "T最終閲覧", "formName = '" & Me.Name & "'") = 0 Then
sSQL = "INSERT INTO T最終閲覧 (IDNo,formName) VALUES(" & Me!ID & ",'" & Me.Name & "')"
CurrentDb.Execute (sSQL)
Else
sSQL = "UPDATE T最終閲覧 SET IDNo =" & Me!ID & ", FormName = '" & Me.Name & "'"
CurrentDb.Execute (sSQL)
End If
以下、蛇足気味ですが
Function chkTable() をいつ呼び出すか・・
フォームのOpen/UnLoad時イベントでも良いのですが
テーブルを消してしまう私のようなうっかり野郎でなければ
マクロで
プロシージャの実行
プロシージャ名 chkTable()
マクロ名を、autoexec で保存。
としても良さそうです。この場合は、MDB?ACCDB?が開かれる都度実行されます。
蛇足2
他のフォームでもやりたくなった場合を想定してしまったが、余計なお世話かも。
・・・その場合、もっと洗練されたようにも出来ますが、
これは後々の課題ということで、さいなら~ (^_^)/~
出来ました!ありがとうございます。
標準モジュールの使い方がいまいちだったのが理解することができました。
まだまだ勉強します。ありがとうございました。
No.3
- 回答日時:
GoToRecordで出来ます。
ただしフォームを開く前に最終閲覧レコードNo.が確定している事が前提です。
そのためにちょっとした仕掛けをします。
1.プロフィールというテーブル作成します。
このテーブルには例えば企業であれば企業名、決算期、消費税率等
企業の基本になるフィールドを定義します。
この中に最終閲覧No.も定義しておきます。
2.「メニュー」というフォームを作成し、1.のプロフィールレコードソースとします。
最終閲覧No.のテキストボックスの可視をいいえにしても有効です。
3.フォームに次の命令文を追加します
Private Sub Form_Activate()
DoCmd.GoToRecord , , acGoTo, Forms!メニュー!最終閲覧No.
End Sub
Private Sub Form_Current()
Forms!メニュー!最終閲覧No. = CurrentRecord
End Sub
補足、このメニューフォームをファイルを開いたときに表示し、ここから他のフォーム、レポートを開くようにしています。
フォームとテーブルを使うとは、勉強になります。一見簡単そうですがなかなか自分の頭から作り出すことができず苦労します。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「フォームを作成できませんで...
-
フォームの高さを数値で指定し...
-
アクセス フォームをリクエリ...
-
MSワード 年齢を計算表示でき...
-
Accessフォームを開くときに決...
-
デフォルトでチェックボックス...
-
アクセス2010 作った記憶のな...
-
Access テキストボックスの通貨型
-
大至急!アクセスのフォームを...
-
YahooのIDがロックされてしまい...
-
帳票フォームのなかにリストを...
-
データ>フォームで入力したい。
-
access2000表形式フォームから...
-
Accessのフォーム更新方法
-
access ユーザによるフォーム...
-
Accessで、フォームからフォー...
-
ACCESSでオートメーションエラー
-
Access フォームヘッダーに作成...
-
Accessのフォームで追加したデ...
-
Accessのフォームで開く時のウ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「フォームを作成できませんで...
-
YahooのIDがロックされてしまい...
-
フォームの高さを数値で指定し...
-
MSワード 年齢を計算表示でき...
-
大至急!アクセスのフォームを...
-
デフォルトでチェックボックス...
-
Accessで、フォームからフォー...
-
Accessのフォームで開く時のウ...
-
Excelのデータフォームの設定変更
-
帳票フォームのなかにリストを...
-
ACCESSでオートメーションエラー
-
フォームなどに半角カナで入力...
-
アクセスのレコードをフォーム...
-
エクセルで各セルをダブルクリ...
-
Accessフォームを開くときに決...
-
access vba 開いていないフォー...
-
アクセス フォームをリクエリ...
-
アクセスで同じフォームを違う...
-
エクスポートされたエクセルの...
-
Accessのフォームを改ページしたい
おすすめ情報