Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

サブフォームへのコントロールの移し方についての質問です。

677 views
Skip to first unread message

あつし

unread,
Oct 5, 2009, 7:30:01 AM10/5/09
to
「前提条件」
フォーム名を「AAAAA」とします。
サブフォーム名を「AAAAA明細」とします。
サブフォーム名「AAAAA明細」には8件のレコードを表示できるとします。
サブフォーム名「AAAAA明細」には10件以上のレコードがあるとします。

「やりたい事」
フォーム「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


どうしたらよいのでしょうか。
どなたか教えて下さい。


Hotことり

unread,
Oct 5, 2009, 9:06:56 PM10/5/09
to
Hotことり と申します。

"あつし" <@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

(以下略)

あつし

unread,
Oct 6, 2009, 12:58:01 AM10/6/09
to
Hotことりさんへ

アドバイスありがとうございます。
試してみましたが、だめでした。

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

キーボーイ

unread,
Oct 7, 2009, 9:37:07 AM10/7/09
to
キーボーイです。

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 がレコードソースなら、式が複雑すぎます。

--
キーボーイ

キーボーイ

unread,
Oct 7, 2009, 9:59:08 AM10/7/09
to
キーボーイです。

"あつし" <@discussions.microsoft.com> wrote in message

news:06FB8054-0553-443C...@microsoft.com...
> Visual Basicの

VB のお話でしょうか。
VB であれば、VB のグループがあります。
Access のお話であれば、VBA と正しく書きましょう。

また、いわゆる半角カタカナ(「ステップイン」のインの部分)は
使わないようにしましょう。

--
キーボーイ

キーボーイ

unread,
Oct 7, 2009, 9:08:12 PM10/7/09
to
キーボーイです。

"キーボーイ" <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 がレコードソースなら、式が複雑すぎます。

このクエリが原因でレコードが移動しないとは思えませんので、
原因は他にあります。
たとえばサブフォームの外から操作しているとか。

--
キーボーイ

0 new messages