ACCESSで別フォームの処理を行う方法

このQ&Aのポイント
  • ACCESSのメインフォームから別フォームを開く際に、特定の情報をセットしたい場合、以下のような方法で処理を行うことができます。
  • ただし、一部の処理でエラーが発生する場合があります。エラーが発生する原因は、オブジェクトがサポートしていないプロパティまたはメソッドを使用しているためです。
  • 具体的なエラーメッセージやコードの詳細がわかり次第、解決策を提供させていただきます。
回答を見る
  • ベストアンサー

ACCESS 別フォームから別フォームの処理を

ACCESSでメインフォームから別フォームを 【メインフォーム】 DoCmd.OpenForm "FM_商品検索", , , , , acWindowNormal 【商品検索フォーム】 検索画面でJANコードを選んだらJANコードをセットして、商品マスタの読込等の処理をしたい Forms!F_仕入!F_仕入sub.Form!JANコード = Me.JANコード ↑これは動く Forms!F_仕入!F_仕入sub.JANコード_BeforeUpdate ↑これがエラーになります 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」 でエラーになります。 Forms!F_仕入!F_仕入sub.JANコード_BeforeUpdate Public Sub JANコード_BeforeUpdate(Cancel As Integer) 何がおかしいのでしょうか? 宜しくお願いします

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.5

yuyu4247さんのパターンでしたら Forms!F_仕入!F_仕入sub.Form.JANコード_BeforeUpdate (False) か Form_F_仕入!F_仕入sub.Form.JANコード_BeforeUpdate (False) でいかがですか。

yuyu4247
質問者

お礼

kkkkkmさん テストが遅くなって済みません。 テストうまくいきました。 大変ありがとうございます。

その他の回答 (4)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

------------------------------------------------------------------------------ 【商品検索フォーム】 >DoCmd.OpenForm "FM_商品検索", , , , , acWindowNormal  検索画面でJANコードを選んだらJANコードをセットして、  商品マスタの読込等の処理をしたい  Forms!F_仕入!F_仕入sub.Form!JANコード = Me.JANコード  ↑これは動く ☆これが動きますか、初めて知りました。これを開くコードはどの様なものですか >DoCmd.OpenForm "F_仕入", , , "Forms!メニュー!JANコード=JANコード"  Forms!F_仕入!F_仕入sub.JANコード_BeforeUpdate  ↑これがエラーになります ☆フォーム名にはForms!を省略できないのですね ☆-------------------------------------------------------------  フォームは、"FM_商品検索","F_仕入","F_仕入sub"の3つのようですが  このような組み立ては、できないように思います。  ・"FM_商品検索"上のJANコードが確定したときのイベントで   "F_仕入"を開きます。...."JANコード"の項目があること   "F_仕入SUB"を開きます。."JANコード"の項目があること ---------------------------------------- Private Sub JANコード_Exit(Cancel As Integer) DoCmd.OpenForm "F_仕入", , , "Forms!メニュー!JANコード=JANコード" DoCmd.OpenForm "F_仕入sub", , , "Forms!メニュー!JANコード=JANコード" End Sub ---------------------------------------- ☆もしかして、"F_仕入"と"F_仕入SUB"のレコードソースは  リレーションシップの設定が必要かも  両テーブルから選択クエリーを作成

  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.3

> Form_F_仕入!F_仕入sub.JANコード_BeforeUpdate (False) 違います。 F_仕入!F_仕入sub ではなくて F_仕入subのソースのフォーム名 です。

  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.2

> 別フォーム(検索フォーム)から別フォーム(F_仕入のF_仕入sub)の「JANコード_BeforeUpdate」を実行したいと思っています。 Form_F_仕入subのソースのフォーム名.JANコード_BeforeUpdate (False) でどうでしょう。

yuyu4247
質問者

補足

Form_F_仕入!F_仕入sub.JANコード_BeforeUpdate (False) でやってみたのですが、 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」に なってしまいます

  • kkkkkm
  • ベストアンサー率65% (1619/2458)
回答No.1

検索画面のJANコードの更新後処理のイベントプロシージャで Forms!F_仕入!F_仕入sub.Form!JANコード = Me.JANコード を実行したらいいのではないですか。 Private Sub JANコード_AfterUpdate() Forms!F_仕入!F_仕入sub.Form!JANコード = Me.JANコード End Sub のようになると思います。

yuyu4247
質問者

補足

説明不足ですみません。 F_仕入subのJANコードには内容はセットされるのですが、 その後に、セットされたJANコードで商品マスタを読み込んで、商品名、単価などを 「Forms!F_仕入!F_仕入sub.JANコード_BeforeUpdate」で処理しているので、 別フォーム(検索フォーム)から別フォーム(F_仕入のF_仕入sub)の「JANコード_BeforeUpdate」を実行したいと思っています。 宜しくお願い致します

関連するQ&A

  • Access-フォームのCaption変更

    お願い致します。 Access97のフォームのクラスモジュールでCaptionの変更を行うコードを書いたのですが、いまいちうまくいきません。 ご指導お願い致します。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ *********************************************** Private sub Form_Load() DoCmd.OpenForm "F_OPEN" Forms!F_OPEN!Msg.Caption="お待ちください" ************************************************ このForms!F_OPEN!Msg.Caption="お待ちください" のところで、エラーメッセージ 「'Item'メソッドは失敗しました:'Forms'オブジェクト」がでてしまうのです。 お願い致します。

  • フォームから別フォームを開くには?

    こんにちは。 Access2010を使っています。 開いているフォームから別のフォームを開きたいのですが、その後ろ側のみにワイルドカード(「*」マーク)を入れたいのですが、上手くいきません。 いろいろやってみましたが、「メモリ不足です」となってしまい、上手くいきません。下記コードにどのようにしてワイルドカードを入れたらよいでしょうか? DoCmd.OpenForm "開きたいフォーム名", acNormal, "", "[キー名]=[Forms]![開いているフォーム名]![キー名]", , acNormal ご教授よろしくお願い致します。

  • Access 複数条件のフィルタ

    フォーム[F_MENU]に非連結のテキストボックス検索用A~Cで3つあります。 検索用A 検索用B 検索用C AかつBかつCという全件一致でフィルターをかけてフォーム[詳細]を開きたいのですが DoCmd.OpenForm "F_詳細", , , "A = '" & Forms!F_MENU!検索用A & "'" And "B = '" & Forms!F_MENU!検索用B & "'" And "C = '" & Forms!F_MENU!検索用C & "'" とやると、実行時エラー'13':型が一致しません。 と出てしまいます。 Aだけ、Bだけ、Cだけ、それぞれひとつずつ書けば、エラーなく結果が得られます。 DoCmd.OpenForm "F_詳細", , , "A = '" & Forms!F_MENU!検索用A & "'" DoCmd.OpenForm "F_詳細", , , "B = '" & Forms!F_MENU!検索用B & "'" DoCmd.OpenForm "F_詳細", , , "C = '" & Forms!F_MENU!検索用C & "'" おそらくANDの使い方が誤っていると思うのですが、添削お願いいたします。 全てのテキストボックス及び元テーブルのデータ型はテキスト型です。 条件は3つとも完全一致のみで、検索用ABC、F_詳細のABCそれぞれのカラムにNULL値はありません。 よろしくお願いします。

  • Access 2重3重のポップアップフォームの場合

    Accessです。 フォームを3つ作りました。 フォーム1=「A] フォーム1=「B]>ポップアップ「はい」 作業ウインド固定「はい」 フォーム1=「C]>ポップアップ「はい」 作業ウインド固定「はい」 「A」が開くとき Private Sub Form_Open(Cancel As Integer) ____DoCmd.OpenForm "フォーム2", , , , , acHidden ____DoCmd.OpenForm "フォーム3", , , , , acHidden End Sub として 「A」にはボタンがあってクリックすると「B」が Visible=True になります。 Private Sub コマンド1_Click() ____Forms!フォーム2.Visible = True ____Forms!フォーム2.SetFocus End Sub さらに「B」にもボタンがあってクリックすると「C」が Visible=True になります。 Private Sub コマンド1_Click() ____Forms!フォーム3.Visible = True ____Forms!フォーム3.SetFocus End Sub 「C」が現れた後、マウスイベントがきかなくなります。 というより、閉じることもできなく、アクセス本体をCLT+ALT+DELで強制終了させなくてはいけなくなります。 対処方法を教えて下さい。

  • ACCESS acDialogで検索画面を開く

    ACCESSで商品コードの検索フォームをacDialogで開いて、商品を選んだあと検索フォームを閉じてpublicの引数をメインフォームで受取っていますが、検索フォームを開いたままにしたい。 今は DoCmd.OpenForm "FM_商品検索", , , , , acDialog Me.商品コード = glbRecstrNo ”FM_商品検索”を開いたままで、メインフォームに商品コードを受け取る方法はありますか? 宜しくお願いします

  • フォームが開かない

    「F説明」と言うフォームは存在しているし、ナビゲーションウインドウで、ダブルクリックすると、 フォームは開くのに、なぜかVBAで DoCmd.OpenForm Forms("F説明"), acNormal とすると "実行時エラー2498 指定した式は、 いずれか の引数とデータ型が対応していません。” となります。 このvbaコードは、"F説明"の部分を変数にして使いまわしたいので、ダブルコーテーションで囲える文法にしたいのですが、どこが間違っているのか教えていただけますか。

  • Access2003にて、メインフォーム上に設置した「コピー」ボタンを

    Access2003にて、メインフォーム上に設置した「コピー」ボタンをクリックすると、メインフォームとサブフォーム9個のレコードを一括で新規レコードにコピーするVBAを作成しています。 ですが、ボタンをクリックすると、 「3164  フィールドを更新できません」 とメッセージが表示されて、メインとサブ1だけがコピーされ、サブ2~9はコピーされません。 テーブルの構成は以下のようになっています。 メイン(テーブル名:00メイン)  ・計画書番号(オートナンバー型)※主キー  ・コピーフラグ(数値型)  ・コピー実行日(日付型)  ・作成フラグ(数値型)  ・作成日(日付型)  ※この他40程フィールドがあります。 サブ1~9(テーブル名:01~09サブ)  ・計画書番号(長整数型)※インデックスは「はい(重複なし)」  ・レコード作成用番号(長整数型)  ※この他各サブテーブルごとに、20~40程のフィールドがあります。 サブ1~9の計画書番号はメインの計画書番号とリレーションシップしています。 サブフォームに計画書番号を表示するようにしてみると、コピーボタンをクリックしたときサブ2だけがメインで取得した新しい計画書番号が表示されていて、サブ2~9はコピー元の計画書番号が表示されています。 以下にコピーボタンをクリックした時のコードとBeforeUpdate時のコードを記載します。 また、「Forms!メイン!サブ1.Form.レコード作成用番号 = Me.txt計画書No」の箇所はメインの新規作成時にサブ1~9にレコードを作成するようにしています。 (メイン作成と同時にサブにもレコードを作成したかったので・・・) サブ2~9までのコピーができるようにするにはどうしたらよいのでしょうか? よろしくお願いいたします。 Private Sub cmdコピー_click() DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdCopy DoCmd.GoToRecord , , acNewRec DoCmd.RunCommand acCmdPasteAppend Me!コピーフラグ = 1 Me!コピー実行日 = Date Me!サブ1.SetFocus DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdCopy DoCmd.GoToRecord , , acNewRec DoCmd.RunCommand acCmdPasteAppend Me!サブ2のサブフォーム.SetFocus DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdCopy DoCmd.GoToRecord , , acNewRec DoCmd.RunCommand acCmdPasteAppend ※以下サブ3~9までサブ2と同じコードを記述しています。 MsgBox "レコードのコピーが完了しました。" End Sub Private Sub Form_BeforeUpdate(Cancel As Integer) Dim dlgret As Integer dlgret = MsgBox("編集内容を保存しましすか?", vbQuestion + vbOKCancel, "保存確認") If dlgret = vbCancel Then Cancel = True Else '新規作成の場合、作成日フラグは既定値0のため1に変更 If Me!作成フラグ = 0 Then Me!作成フラグ = 1 Me!作成日 = Date If Me!コピーフラグ = 1 Then Forms!メイン!サブ1.Form.Requery Forms!メイン!サブ2.Form.Requery ※サブ3~9も同様にRequeryを行ないます。 Else MsgBox "コピーフラグは" & Forms!メイン!コピーフラグ & "です。" & Chr(13) & _ "新規作成を実行します。""" Forms!メイン!サブ1.Form.レコード作成用番号 = Me.txt計画書No Forms!メイン!サブ2.Form.レコード作成用番号 = Me.txt計画書No ※サブ3~9も同様に処理します。 End If Else End If End Sub

  • Accessでフォームの検索結果をレポートで表示

    いつもお世話になっています。 前回の質問に続いて製品分析表を作成しています。 ベースは出来て、最後は必要な情報を印刷するのみとなりました。 情報の検索は、F_検索フォームから複数の条件から絞込みを行い、 それをボタンから指定したフォームで開いて再編集する操作は上手くいっています。 Private Sub 編集_Update() If Me.編集 Then DoCmd.OpenForm "F_製品分析" Set Forms!F_製品分析.Recordset = Me.Recordset Else DoCmd.Close acForm, "F_検索" End If End Sub ただこれをレポートに置き換えると「変数」がないとエラーが表示されてしまいます。 どうか解決策をご指示ください。 よろしくお願いいたします。

  • アクセス 別フォームの関数の実行について

    お世話になります。 ご存知のかた、ご教授お願いします。 アクセス2013 を使用しています。 メイン画面から、検索画面を呼び出し、検索画面で 対象のデータを選択後、メイン画面の表示を更新したい。 現在サブフォームで Forms!フォーム名.関数名 で、 呼び出し元フォームの値を更新しています。 これを変数で可変にしたいのですが(イメージは下) aaa = "受注画面" bbb = "商品表示" (受注画面のpublic sub に商品表示があります) forms(aaa).商品表示 だと実施できますが、 forms!aaa.bbb 当然?のようにできません。 何か方法はありませんか? 商品コードを検索するような検索画面は、多くの画面で 使用することがあると思います。 そのつど、呼び出し元フォームごとに、検索画面を作っていたら フォーム数が非常に多くなりますよね? その回避の仕方が知りたいのです。 私は、上記の方法しか思いつきませんでしたが、ほかにもあれば ご教授よろしくお願いします。

  • ACCESS フォームの操作

    下記のようなことが可能であれば、方法をご教授願います。 まず、構造 フォーム2つ 1.メニュー…コマンドボタン2つ(BT11とBT12) 2.メイン  …コマンドボタン3つ(BT21とBT22とBT23) やりたいことは、 BT11とBT12のクリックイベントでどちらもメインフォームを表示 ただし、 BT11クリック時はacFormAddでメインフォーム上にBT21、BT23だけを表示し、 BT12クリック時はacReadOnlyメインフォーム上にBT22、BT23だけを表示 です。 フォームの表示は出来ましたが、 コマンドボタンの表示/非表示が切り替わりません。 sub BT11_Click() 1行目 DoCmd.OpenForm "フォーム名", acNormal, , acFormAdd, acDialog 2行目 Forms!メインフォーム!BT21.Visible = True end sub BT11をクリックしたときは、1行目でとまっているようです。 メインフォームを閉じるときに2行目を実行しようと するようで、メインフォームがないというエラーがでます。 宜しくお願い致します。

専門家に質問してみよう