dポイントプレゼントキャンペーン実施中!

既存のフォームは項目が多く一目でどれがどこにあるかわかりにくいので、使用していない項目は隠して欲しい、隠した項目もいざ必要となった時には見れるようにして欲しいと言われました。
そこで私は、使用してない項目は別のフォーム(以降:隠れフォームと記述)にして、既存のフォームにコマンドボタンを設けて、クリックすればたどり着けるようにしました。
ところが、隠れフォームへのコマンドボタンを押すと表示されるデータは既存フォームに表示されているデータであって欲しいのですが、隠れフォームのデータは一番最初のデータのままです。
既存フォームと隠れフォームを一緒に移動させる方法はないのでしょうか?
隠れフォームのテーブルは既存フォームと同じです。
隠したい項目だけを選んでクエリを作成してそこから隠れフォームを作成しました。
ツールボックスのサブフォームは使っていません。
どのような方法をとるとよいでしょうか?
どなたかお知恵を貸してくださるようお願いいたします。

A 回答 (2件)

そのテーブルに、主キー(もしくは重複なしのインデックスつきの)フィールドはありますか?


もしあるのでしたら、

> 隠したい項目だけを選んでクエリを作成してそこから隠れフォームを作成しました。

とのことなので、そのクエリに、「既存フォームで現在表示中のレコード」に絞り込む条件を
追加してやるのが一番簡単だと思います。


1)隠れフォームのレコードソースにしているクエリをデザインビューで開く
2)主キー(または重複なしのインデックスつきの)フィールドがまだ追加されていない場合は
 それをドラッグ&ドロップなどで追加
3)上記フィールドの『抽出条件:』欄に、以下のような式を入力
 ・既存フォームの名前が「フォーム1」、上記フィールドが「ID」の場合:
  [Forms]![フォーム1]![ID]
 ・既存フォームがサブフォームを持ち、データ表示をそのサブフォームで行っている場合:
  (メインフォームが「フォーム1」、サブフォームコントロール(→「ソースオブジェクト」として
  指定しているフォーム名ではないので注意)が「サブ1」、上記フィールドが「ID」として)
  [Forms]![フォーム1]![サブ1]![ID]
4)クエリを保存して閉じる

・・・以上です。

なお、フォーム1が開いていない状態でこの隠れフォームを開くと、「[Forms]![フォーム1]![ID]」
(または「[Forms]![フォーム1]![サブ1]![ID]」)の入力を求めるパラメータダイアログが表示される
ようになります。

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

※蛇足※
Husky2007さんの後者案を、375kさんのフォームに現状のまま適用した場合、「現在レコード
ソースに設定済のクエリ」がいったん読み込まれた後に、再度SQL文がレコードソースとして
設定されることになるように思います。

もしそちらを採用されるのでしたら、隠れフォームのレコードソースは削除した上で、

Private Sub Form_Open(Cancel As Integer)
  If Len(Me.OpenArgs & "") = 0 Then
    Me.RecordSource = "クエリ1"
  Else
    Me.RecordSource = Me.OpenArgs
  End If
End Sub

とされるのがよいのではないでしょうか。(現在のレコードソースが「クエリ1」だったとして)
    • good
    • 0
この回答へのお礼

お返事が遅くなって申し訳ありませんでした。
教えていただいた内容を参考に自分が使っている.mdbに適するようにアレンジしてみます。
ありがとうございました。

お礼日時:2007/11/21 10:40

Access の質問なんだろうか・・・。

多分、そうだと仮定して・・・。

1、リンクを利用する。

Private Sub コマンド_詳細フォームを開く_Click()
On Error Resume Next
  DoCmd.OpenForm "tab1 full", , , "[ID]=" & Me![ID]
End Sub

2、OpenArgs を利用する。

Private Sub コマンド_詳細フォームを開くII_Click()
  DoCmd.OpenForm "tab1 full", , , , , , "SELECT * FROM tab1 WHERE ID=" & Me.ID
End Sub

tad1_full:

Private Sub Form_Open(Cancel As Integer)
  If Len(Me.OpenArgs & "") > 0 Then
    Me.RecordSource = Me.OpenArgs
  End If
End Sub

前者はフィルターがかかります。
後者は、1レコードだけを検索・表示します。
そういう意味では、後者がお勧めです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!