「やりたい事」
フォーム「AAAAA」を開いた時、サブフォーム「AAAAA明細」の最後のレコード-7件目にコントロールを移したいのです。
「現在の設定」
サブフォーム「AAAAA明細」のイベントプロシージャの「レコード移動時」に以下のような設定をしていますが「指定したレコードに移動できません。」というエラーになってしまいます。
Private Sub Form_Current()
On Error GoTo Err_Form_Click
Dim IDX1 As Variant
DoCmd.GoToRecord , , acLast
IDX1 = 1
Do Until IDX1 > 8
DoCmd.GoToRecord , , acPrevious, 1
IDX1 = IDX1 + 1
Loop
Exit_Form_Click:
Exit Sub
Err_Form_Click:
MsgBox Err.Description
Resume Exit_Form_Click
End Sub
どうしたらよいのでしょうか。
どなたか教えて下さい。
"あつし" <@discussions.microsoft.com> wrote...
> 「やりたい事」
> フォーム「AAAAA」を開いた時、
(中略)
> 「現在の設定」
> サブフォーム「AAAAA明細」のイベントプロシージャの「レコード移動時」に
親フォーム「AAAAA」を開いた時に動作することを期待するのならば,
使用すべきイベントは,「AAAAA」の「開く時」(あるいは,もしかすると
「AAAAA」の「レコード移動時」)ではないでしょうか。
「AAAAA」の「開く時」に記述する例です。親フォーム上でのサブフォーム
コントロールの名前(サブフォーム自体の名前とは違うことがあります)が
「AAAAA明細」であると仮定します。サブフォームコントロールにフォーカスを
あててからレコード移動を行います。
Private Sub Form_Open(Cancel As Integer)
On Error GoTo Err_Form_Click
Dim IDX1 As Variant
Me.AAAAA明細.SetFocus 'サブフォームコントロールにフォーカスをあてる
DoCmd.GoToRecord , , acLast
IDX1 = 1
Do Until IDX1 > 8
DoCmd.GoToRecord , , acNext, 1
IDX1 = IDX1 + 1
Loop
(以下略)
アドバイスありがとうございます。
試してみましたが、だめでした。
Visual Basicの「ステップイン」ボタンで1ステップずつチェックしていった所、
> DoCmd.GoToRecord , , acLast
でエラー(指定したレコードに移動できません)ではじかれていることがわかりました。
また、いろいろ試してみます。
Private Sub Form_Open(Cancel As Integer)
On Error GoTo Err_Form_Open
Dim IDX1 As Variant
総勘定元帳明細の検索.SetFocus
DoCmd.GoToRecord , , acLast
IDX1 = 1
Do Until IDX1 > 8
DoCmd.GoToRecord , , acPrevious, 1
IDX1 = IDX1 + 1
Loop
Exit_Form_Open:
Exit Sub
Err_Form_Open:
MsgBox Err.Description
Resume Exit_Form_Open
End Sub
Access でのお話でしょうか。せめてバージョンぐらい書きましょうよ。
"あつし" <@discussions.microsoft.com> wrote in message
news:2A45C066-69BB-4E7A...@microsoft.com...
> フォーム名を「AAAAA」とします。
> サブフォーム名を「AAAAA明細」とします。
なぜこんなややこしい説明をするのでしょうか。
"サブフォーム「明細」を持つフォーム「A」があります"
とでもすれば良いのではないですか。
> サブフォーム「AAAAA明細」のイベントプロシージャの「レコー
> ド移動時」に
フォームを開いたときにレコードを移動するのなら、
サブフォームの "Form_Load" イベントに仕掛けないと。
> Dim IDX1 As Variant
なぜ Variant型なのでしょう。
> DoCmd.GoToRecord , , acLast
> IDX1 = 1
> Do Until IDX1 > 8
> DoCmd.GoToRecord , , acPrevious, 1
> IDX1 = IDX1 + 1
> Loop
なぜこんなややこしいことをするのでしょう。
それにこのコード、本当に
"最後のレコード-7=最後から8番目"
のレコードに移動しますか。
DoCmd.GoToRecord , , acFirst
DoCmd.GoToRecord , , acGoTo, _
DCount("*", "レコードソース名") - 7
なお、
Visual Vasic での記述エラーが起きる原因がわかりません
あつし" <@discussions.microsoft.com> wrote in message
news:8B328ACA-B6C2-491E...@microsoft.com...
のクエリあるいは SQL がレコードソースなら、式が複雑すぎます。
--
キーボーイ
"あつし" <@discussions.microsoft.com> wrote in message
news:06FB8054-0553-443C...@microsoft.com...
> Visual Basicの
VB のお話でしょうか。
VB であれば、VB のグループがあります。
Access のお話であれば、VBA と正しく書きましょう。
また、いわゆる半角カタカナ(「ステップイン」のインの部分)は
使わないようにしましょう。
--
キーボーイ
"キーボーイ" <spa...@nifmail.jp> wrote in message
news:e9yZJN1R...@TK2MSFTNGP04.phx.gbl...
> DoCmd.GoToRecord , , acFirst
> DoCmd.GoToRecord , , acGoTo, _
> DCount("*", "レコードソース名") - 7
もっと単純に行うのであれば、
DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acPrevious, 7
でも良いでしょう。
いずれにしても、レコード数が8件以上あることが保証されているこ
とが前提です。
*レコード数が7件以下の場合はエラーになります。
> Visual Vasic での記述エラーが起きる原因がわかりません
> あつし" <@discussions.microsoft.com> wrote in message
> news:8B328ACA-B6C2-491E...@microsoft.com...
> のクエリあるいは SQL がレコードソースなら、式が複雑すぎます。
このクエリが原因でレコードが移動しないとは思えませんので、
原因は他にあります。
たとえばサブフォームの外から操作しているとか。
--
キーボーイ