VBAでヘッダーフォームからサブフォームを動かす方法

このQ&Aのポイント
  • Access97/VBAを使用して、棚と棚上の製品を管理するデータベースを作成しています。
  • ヘッダーフォームでは棚の場所を管理し、サブフォームでは製品番号と棚の移動記録を管理しています。
  • サブフォームで複数の品番の「前」の内容を一括コピーする方法について、VBAを利用して実現したいのですが、うまくいきません。
回答を見る
  • ベストアンサー

ヘッダーフォームからサブフォームを動かすVBAを組めるの?

Access97/VBAは全然わかりません 棚と棚上の製品を管理しているDBです。ヘッダーでは棚の場所(棚1,棚2という感じです)を管理し、サブで棚上に置いてある製品番号と棚の移動記録(「前」と「現」)を管理しています。ヘッダーとサブはそれぞれテーブルも分かれています(ヘッダーテーブルとサブテーブル)。 1つの棚ナンバーに対してサブに登録される品番は通常100個位あります。お聞きしたいのは、サブの中の「前」の内容が100個の品番全て同内容だった場合の事です。サブテーブルの一番上の品番にだけ「前」のデータを入力し、ヘッダーに作った「前の一括コピー」というコマンドボタンをクリックすると、一番上の品番に入れた内容が下の99の品番の「前」部分に一斉にコピーされるようにしたいのです。以前、同一フォーム・同一テーブル内で品番も管理していた時には上手く行っていたのですが、品番をサブフォーム&サブテーブルで管理するようにしたら出来なくなってしまいました。 私がやったのは、まずサブテーブルとヘッダーテーブルを棚番号で紐付けたQuery(棚クエリー)を作り、その後ヘッダーフォーム上に作ったコマンドボタンのイベントプロシージャで「棚クエリーを見に行ってね」というVBAを組む、という方法でした。コマンドボタンをクリックすると、「qdf("p前") = Me![前]」という文が黄色くなります。コマンドボタンを置いてあるヘッダーフォームじゃなくてサブフォームを動かしたいのに「Me!」ってなってるからいけないの?それなら「You!」ならいいの?謎は深まるばかり・・・。誰か教えて!

noname#118698
noname#118698

質問者が選んだベストアンサー

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

ごめんなさい! 今、猛烈に仕事がキてます。今日も明日も休みなしで、睡眠時間もまともに取れない状態です(涙 今しばらくお待ちくだされ! とりあえずは以下のことを補足していただけると助かります。 ○ Q_前の棚番号の一括コピー クエリをダブルクリックして、パラメータを手動で入力してみましたか? それで動くようであれば、VBA側の問題、動かなければクエリ側の問題だと思うのですが… ○(先にも書きましたが、)メインフォーム上にコントロールソースに「棚番号」が設定されているテキストボックスがありますか? あるいは、フォームのレコードソースに「棚番号」を含まないテーブル/クエリが設定されていますか? それとも? うーやばいっす~ もう寝ます。 ごめんなさいね~

その他の回答 (2)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

メインフォームの「レコードソース」プロパティにクエリ名かテーブル名を設定されていますよね。 そのクエリ/テーブルには[棚番号]フィールドはありますか? あるいは、テキストボックスやコンボボックスの値を抽出条件として使用したいのであれば、 Me.コントロール名 ってな感じで指定してください。 また、フィールド名と同じ名前のテキストボックスがあって、その「コントロールソース」プロパティが設定されていなかったり、別のフィールド名が設定されていたりすると、Accessが混乱してしまう場合があります。 そんなときは、コントロールの名前を別のものにすると解決するはずです。 osakana_kiraiさんが試されている方法は、パラメータクエリを使ったやり方ですよね。 どちらかというとそのやり方はマイナーだと思いますので、できればレコードセットを使って解決を図りたいところなんですが… と、ここまで書いといて何ですが、ごめんなさい。時間が尽きてしまいました。(すいません、明日早いもので…) 尻切れトンボではありますが、今日のところはこれにて失礼!

noname#118698
質問者

お礼

お返事を下さってありがとうございます。頼りにしています。本当です。よろしくお願いします。 現在、やはり「一括コピーボタン」は動かないままで、サブテーブル内の修正・登録作業は、一番上の行をコピーして貼ってコピーして貼って・・・・と非常にアナログな感じで行っています。10件20件ならいいのですが、50件同じデータをカット&ペーストしていくのは辛い…。(こんな私がデータベースを作っていること自体間違いな気がしますが…) お時間がある時で結構です。きちんと動く方法を教えて下さい。 よろしくお願いします。

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

メインフォームから、サブフォーム上の情報を参照するには Me![サブフォームコントロールの名前].Form![サブフォーム上のコントロールの名前] ってな感じになります。 こんなんで宜しいでしょうか? 分かりにくければ補足してください。

noname#118698
質問者

補足

ありがとうございます!本当に!昨日からまだ苦しんでいます!教えて頂いたようにやってみた結果、黄色かった文の黄色が消えました!でも、次の行が黄色になってしまいました・・・。もう、どうしていいかわかんないんです。タシケテー! 私がやっているのはこうです。 (1)Header_Formの下にSub_Formがマトリックスのように出ている以下の様なフォームを作る 【Header】 棚 番 号 : 25089 棚上Item : ロケットランチャー類 (前の一括) (現の一括)・・・・・・コマンドボタン 【S u b】 棚番号 / Item品番 / 前の棚番 / 現の棚番 25089 / 256-44 / G25-K350 / K36-HG23 25089 / 321-22 / ・・・上の行の「前の棚番」をコピーしたい (1)Sub_Tableで更新Query(名前は「Q_前の棚番号の一括コピー」)を組む フィールド : 前棚番号 棚番号 テーブル : Sub_Table Sub_Table コードの更新 : [p前] 抽 出 条 件 : [p棚番号] (2) Header_Formにコマンドボタン作成…プロパティの「クリック時」に「イベントプロシージャ」設定 (3) VBA設定・・・ Private Sub コマンド366_Click() Dim dbs As Database, qdf As QueryDef Set dbs = CurrentDb Set qdf = dbs.QueryDefs![Q_前の棚番号の一括コピー] qdf("p前") = Me![Sub_Tableのサブフォーム].Form![前] qdf("p棚番号") = Me![棚番号] qdf.Execute dbs.Close End Sub qdf("p前")=~以下は教えて頂いたように入れたら黄色くならなくなりました。ただ、今度はその下の"p棚番号"の行が黄色くなってしまいます。 「実行時エラー '2465'/指定した式で参照されている'棚番号'フィールドがみつかりません」という警告文が出てきます。「Queryをかませているからわかりにくいじゃ?」と同僚に言われましたが、最初にこのVBAを教えてくれた人がこの方法だったので・・・。クエリーを組まない方がわかりやすいなら、どうかそのやり方を教えて下さい!なんか長くなっちゃいました・・・。あんまり忙しくない時でいいので是非教えて下さい。タシケテー!

関連するQ&A

  • アクセスのサブフォーム

    よろしく、お願いします。 アクセスのサブフォームをVBAでテーブルに登録する方法を教えてください。 フォームからメインテーブルとサブテーブルへ、ボタン一つで同時に登録したいのです。 よろしく、お願いします。

  • 親フォームからサブフォームのレコードソースを設定

    親フォームからサブフォームのレコードソースを設定するには? フォーム1にテーブル1をドロップアンドドラッグして、「テーブル1のサブフォーム」を作成しました。 フォーム1にあるコマンドボタンから「テーブル1のサブフォーム」のRecordSourceを設定する方法を教えてください。 「テーブル1のサブフォーム」からなら Private Sub Form_Load() Me.RecordSource = "" End Sub とできるのですが、 やりたいことはフォーム1からのイベントなので 「テーブル1のサブフォーム」からのイベントは使えません。 だからってフォーム1の Private Sub コマンド2_Click() Me.テーブル1のサブフォーム.RecordSource = "テーブル1のサブフォーム" End Sub とするとコンパイルエラーになります。 良い方法があれば教えてください。アドバイスよろしくお願いします。

  • サブフォームにした方がいいのか親フォームがいいのか

    単票・帳票フォームで使う場合、 サブフォームにした方がいいのか親フォームのままのほうがいいのか。 アクセスでフォームでデータを表示する際に、 フォームのデータシートビューの場合は、 フォームヘッダーにコントロールを置けないから、 データシートをサブフォームとして、親フォームに乗せてコントロールを設置しますが、 単票・帳票フォームの場合は、フォームヘッダーにコントロールが置けますよね。 その場合でもデータシートビューのように サブフォームにした方が良いのでしょうか? そもそもどういう時にサブフォームにした方が良いのかわかりません テーブルやクエリのデータをフォームとしてデータシートビューで表したい上、 コントロールも設置したい時にサブフォームにするべきで、 それ以外(単票・帳票フォーム)はフォームのまま使うべきでしょうか? 添付の画像は、 帳票フォームをサブフォームに載せずにコマンドボタンなどを置いたバージョンです。

  • サブフォームをリクエリしたい

    メインフォームのコマンドボタンを押下するとvbaを使ってテーブルのデータを更新します。 メインフォームの中にはサブフォームがあり、 そのサブフォームとテーブルがリンクしています。 サブフォームにはテーブルのデータが表示されており、 メインフォームのコマンドボタン押下→テーブルデータ更新 がされると、全て#Deletedという文字が表示されます。 なので、 Private Sub cmd_データ更新_Click() Call データ更新 Me.Controls("Fサブ").Form.Requery End Sub としたのですが、 「実行時エラー’2465’:指定した式で参照されている’Fサブ’フィールドが見つかりません。」 が発生します。 Me.Controls("Fサブ").Requery これにしても同じでした。

  • サブフォームの表示の種類をVBAで操作したい

    こんばんは。 アクセスのフォームの中にサブフォームを入れていて コマンドボタンを押すたびに そのサブフォームを フォームビューか、 データシートビューか、 ピボットテーブルビューかに切り替えたいのですが VBAで可能でしょうか? 宜しくお願い致します。

  • サブフォームを複数持つフォームを、一つのキーワード取得用フォームから印

    サブフォームを複数持つフォームを、一つのキーワード取得用フォームから印刷できますか。 印刷用フォームを作成しました。 その中には、基本情報とサブ情報1、サブ情報2…というような複数のサブフォームがあります。 基本テーブルは、 商品番号、商品名 内容 というようなフィールドがあります。   サブ1テーブルは、 商品番号、日付A サブ2テーブルは、 商品番号、日付B キーワード取得用フォームに、商品番号と日付を入れてコマンドボタンを押すと、サブフォームを複数持つフォームに、 (1)基本テーブルの内容と、 (2)それぞれのサブフォームには取得した日付の日付情報(複数レコードもあり) を入れて印刷したいのです。 こんなことは可能でしょうか。 コマンドボタンにクリック時のイベントを書けばいいような気もするのですが、方法がわかりません。 教えてください。よろしくお願いいたします。

  • サブフォームをリクエリするには?

    アクセスのフォームにはサブフォームがあり、 親フォームの上にあるコマンドボタンで、テーブルに対してアクションクエリでレコードの削除やレコードの更新を行います。 サブフォームにはそのテーブルをソースとしたデータを表示させているのですが、 親フォームの上にあるコマンドボタンのイベントの最後に、 Me.Controls("サブフォーム").Requery を入れても、フォームのデータが#Deletedになります。 Me.Requery でも、サブフォームのデータは#Deletedになってしまいます。 フォームを開きなおしたり、並べ替えをすればデータが表示されますが コマンドボタン押下後にイベントを実行し終わったら、サブフォームのデータも更新されたデータを表示するさせるには どうすればいいでしょうか?

  • ACCESSのサブフォームをVBAで・・・

    よろしくお願い致します。 ACCESSのサブフォームをVBAでテーブルに入力するにはどのようにしたら良いのでしょうか? イメージ的にはボタンをクリックするとメインのフォームとサブフォームの両方のデータが、別々のテーブルに入力されるようにしたいのですが・・・ ご回答ください。お願い致します。

  • アクセス サブフォームの使い方

    フォームにテキストボックスとコマンドボタンサブフォームが1つづつありま す。 やりたいことは、テキストボックスに入力した条件でコマンドボタンを押すと サブフォームに結果が表示されるというものです。 ID 分類 名称 1  花  バラ 2  花  ユリ 3  昆虫 カブトムシ とテーブルがあった場合、 テキストボックスに 花 を入力すると サブフォームに バラとユリが 表示されるというものです。(実際にはフィールド数はもっとあります。) コマンドボタンにクエリの実行を登録し、サブフォームはクエリをベースに作 成しました。 コマンドボタンをクリックするとクエリの結果が表示され(当たり前ですね) サブフォームは白紙のままです。 ファームのデザインビューをクリックし、再度フォームを表示すると結果は反 映されます。 この、クエリの結果を表示せず、かつサブフォームに結果を表示させる方法を 教えてください。

  • サブフォームのビューを切り替えたい

    親フォーム(フォーム1)にサブフォームとして、 テーブルをソースとするサブフォーム(テーブル1のサブフォーム)を配置しました。 親フォームからサブフォームのビューを変更したいのですが どうすればいいか教えてください。 親フォームのコマンドボタンにはそれぞれ Private Sub 単票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 1 '帳票フォーム End Sub Private Sub 帳票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 0 '単票フォーム End Sub としたのですが、 実行すると 実行時エラー 2136 "このプロパティを設定するには、フォームまたはレポートをデザインビューで開きます"。 となってしまいます。 Private Sub 帳票フォームへ切り替え_Click() DoCmd.SelectObject acForm, "テーブル1のサブフォーム" DoCmd.RunCommand acCmdFormView End Sub にしたところ、 実行時エラー 2489 “オブジェクト テーブル1が開いていません、” になります。 サブフォームに埋め込んでいて親フォームを開いていても 開いてない事になるのですね。 フォームビューの時に、切り替える事は不可能なのでしょうか? 帳票ビュー表示用フォーム、 単票ビュー表示用フォーム を作るしかないのでしょうか?