フォームに対してRequeryすると先頭のレコードへ移動してしまうので
Requeryする前のレコードの番号を取得して
Requery後にそのレコード番号へ移動したいのですが
Sub test()
i = Forms("Form").Controls("SubForm").Form.CurrentRecord
Forms("Form").Controls("SubForm").Requery
DoCmd.GoToRecord acActiveDataObject, Forms("Form").Controls("SubForm"), acGoTo, i
End Sub
これをすると、実行時エラー2498
指定した式は、いずれかの引数とデータ型が対応していません。
になりますが、
どこがおかしいのでしょうか?
No.1ベストアンサー
- 回答日時:
【要旨】
サブフォームのレコード移動では、対象サブフォームは引数で指定するのではなく、
SetFocusメソッドで移動後、引数を省略したGotoRecordを使用します:
Forms("Form").Controls("SubForm").SetFocus
DoCmd.GotoRecord , , acGoto, i
但し、「Requery前後でのレコード移動の回避」が目的の場合は、Requeryの
対象を「親フォームまたはサブフォームのFormオブジェクト」ではなく「サブフォーム
コントロール」とすればOkです。
<現状・例1>
Forms("Form").SetFocus
DoCmd.Requery
<現状・例2>
Forms("Form").Requery
<現状・例3>
Forms("Form").Controls("SubForm").Form.Requery
<代替策>
Forms("Form").Controls("SubForm").Requery
※「現状・例3」との違い(→途中の「.Form」の有無)に注意。
【詳細】
> 実行時エラー2498
このエラーの直接の原因は、GotoRecordメソッドの第2引数に指定している
「Forms("Form").Controls("Subform")」の部分です。
ここに指定するのはオブジェクト名になりますが、そのデータ型は文字列型です。
一方、「~.Controls(~)」の形で指定した場合、取得できるのは
a)オブジェクトそのもの
b)そのオブジェクトのデフォルトプロパティ
のどちらかです(→状況によって変化します)。
(例えばテキストボックスなら、TextBoxオブジェクトまたはValueプロパティの値)
サブフォームのデフォルトプロパティは調べていませんが(汗)、少なくとも文字列
型のプロパティではないため、「型が一致しない」とのエラーとなります。
サブフォームのコントロール名を取得する場合は、
Forms("Form").Controls("SubForm").Name
というように、Nameプロパティを明示的に指定する必要があります。
ただ、「サブフォームのレコード移動」の場合、明示的に「Name」プロパティを
指定しても解決には至りません(汗)
これは、GotoRecordメソッドの第2引数には、直接開いているオブジェクトの
名前のみが有効なためで、サブフォームを直接的に指定することはできない、
ということです。
(注:Microsoftの資料を探したわけではなく、経験則から記述していますので、
私の勘違いでしたらご容赦願います(汗))
サブフォームのレコード移動には、冒頭に記述したとおり、「フォーカスの移動」と
「一部の引数を省略したGotoRecord」を使用します:
Forms("Form").Controls("SubForm").SetFocus
DoCmd.GotoRecord , , acGoto, i
なお、これも冒頭に書きましたが、サブフォームのRequeryの仕方には幾つか
方法がありますが、Requeryの対象を「コントロールとしてのサブフォーム」にすれば、
レコード移動が発生しませんので、GotoRecord自体が不要になります。
http://www.f3.dion.ne.jp/~element/msaccess/AcTip …
No.2
- 回答日時:
フォーカスがあろうが無かろうが、やりたいことをやる・・・・
レコードを特定できるもの(以下では「an」のオートナンバ)があるとします。
現在の「an」が何かを覚えておいて Requery します。
結果の RecordsetClone に対して検索( FindFirst )します。
一致するものがあたら、その Bookmark をフォームへ設定します。
Public Sub test()
Dim sS As String
With Forms("Form").Controls("SubForm").Form
.Painting = False
sS = "an = " & .Recordset("an")
.Requery
.RecordsetClone.FindFirst sS
If (Not .RecordsetClone.NoMatch) Then
.Bookmark = .RecordsetClone.Bookmark
End If
.Painting = True
End With
End Sub
※ 対象のフォームを変更する時には
With Forms("Form").Controls("SubForm").Form
部分を変更するだけです。
※ 新規行だった場合は上記はエラーになるかも・・・
また、Requery によって、覚えていた「an」が表示対象外になった場合、先頭のままです。
なお、何行目・・・これが Requery 前後で変更なければ以下でできるかも
Public Sub test()
Dim i As Long
With Forms("Form").Controls("SubForm").Form
.Painting = False
i = .Recordset.AbsolutePosition
.Requery
.Recordset.AbsolutePosition = i
.Painting = True
End With
End Sub
※ 上記双方未検証(動かなかったらごめんなさい)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
自分の通っていた小学校のあるある
進学したり大人になってから、「あれって自分の小学校だけだったのかな」と思うことありますよね。 逆に「他の小学校ってそんなことするの!?」と思ったり。 そんな「自分の通っていた小学校」のあるあるを教えてください!
-
我がまちの「給食」自慢を聞かせてっ!
富山県の給食には「ベニズワイガニ」が出る、、、なんて話を聞いたことがあります。 日本全国「え、給食にそれ出るの!?」な驚きメニューがまだまだあるはず!
-
Access サブフォームでの選択行の取得
その他(データベース)
-
サブフォームの新規レコードに移動したい アクセス
Access(アクセス)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
-
4
ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい
Access(アクセス)
-
5
Access2000 サブフォームのRecordSet取得法
Access(アクセス)
-
6
スクロールバーをVBAで操作したい
Access(アクセス)
-
7
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
8
ACCESSのサブフォームからメインフォームへの移動
Access(アクセス)
-
9
アクセスVBA フォームのスクロールバーを動かす。
Visual Basic(VBA)
-
10
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
11
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
12
Access メインフォーム サブフォームにて
Access(アクセス)
-
13
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
14
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
15
サブフォームのデータを保存する方法
その他(Microsoft Office)
-
16
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
17
ACCESSのBookmarkプロパティの使い方
その他(データベース)
-
18
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
19
サブフォームのイベント取得
Visual Basic(VBA)
-
20
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・遅刻の「言い訳」選手権
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サブフォームに対してGoToRecor...
-
親フォームからサブフォームの...
-
Access2007 ラベルの削除がで...
-
access フォーム上で複数行の...
-
アクセス2003のサブフォームの...
-
ACCESSのサブフォームコピーに...
-
Excelで入力したデータを自動的...
-
YahooのIDがロックされてしまい...
-
Access VBAボタンでテキストボ...
-
passwordが入れられません・・・・
-
ACCESS2000にて「うるう年」の...
-
フィルタ後のフォームの件数の...
-
iphoneのフルスクリーンの解除方法
-
ExcelVBAで指定外のUserFormを...
-
Access2000のレポートで目次(...
-
新規レコード行を非表示にしたい
-
レコードを保存するコード ア...
-
アクセスのレコードをフォーム...
-
ACCESSのレポートで別のレポー...
-
ACCESS フォームで、ボタンの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クエリで出来た表にチェックボ...
-
サブフォームに対してGoToRecor...
-
サブフォームを非表示させる方...
-
親・子リンクフィールドの設定...
-
ACCESS──メインフォームでサブ...
-
親フォームからサブフォームの...
-
Accessで埋め込んだサブフォー...
-
ACCESSにて
-
Access VBA には Gridはないで...
-
access フォーム上で複数行の...
-
ACCESSサブフォームにデータ反...
-
ACCESSのフォームで列固定?
-
ACCESS VBA メインフォーム及び...
-
Access2007 ラベルの削除がで...
-
ACCESSのサブフォームコピーに...
-
Access SUMの結果が何もない時...
-
サブフォームのあるフォームか...
-
アクセス2003のサブフォームの...
-
ACCESSで条件によってサブフォ...
-
ACCESS サブ・メインフォーム...
おすすめ情報