• 締切済み

アクセスのVBAなんですけど

アクセスのVBAでフォームからフォームへ値を渡すことはできますか?具体的にいうとあるフォームでコンボボックスから選択し、OKボタンで次のフォームを開くのですが、初めのコンボボックス(ちなみに5つ選択項目があります)で選んだ条件でフォームの表示内容を変更させようと思っています。 今のところ、選択した項目を一時的にテーブルに保存して、新しいフォームが開くときにテーブルから値を取得してやるのか・・・・と考えているのですが、まどろっこしいので・・・・・よろしくお願いします。

みんなの回答

  • yoisho
  • ベストアンサー率64% (331/516)
回答No.4

コンボボックスで選ぶ値がテキスト型なら(そうでなければ、テキスト型に変換して)、OpenArgs プロパティ を利用するのはいかがでしょうか? 具体的には、元のフォームで DoCmd.OpenForm FormName:=”新たに開くフォーム名”, OpenArgs:=Me!コンボボックス名 として、新しいフォームを開き、 新たに開いたフォームの Open イベントで、OpenArgs の値を元に処理を行えば、わりと簡単だと思いますが。

  • Kalen_F
  • ベストアンサー率25% (2/8)
回答No.3

最初のフォームのコマンドをクリック時のプロシージャに、 ▲新たに開くフォーム名: form2 ▲選択したコンボボックス名: ret ▲form2の受取側テキスト名: res Docmd.OpenForm "form2" Forms!form2!res.Value = Me!ret.Value で上手く出来るハズです! もしその後に最初のフォームを閉じてしまいたいのでしたら、最後にCloseするよう書いてしまいます。

arex_santa
質問者

お礼

お返事有難うございます。 基本ができていないせいで、Form!form2!res.Valueという書式を知りませんでした。これから役立ちそうです。でもこれだと表示されるラベルの値は変更されるのですが、元のCaptionの値が変更されず、新たに開くフォームでの If lblA.Caption="文字列" then という条件が一致しません????? のでNO1さんのように共通モジュールに値のSetとGetの関数を自作しました。

  • qwedesu
  • ベストアンサー率31% (6/19)
回答No.2

開かれるフォームのLoadイベントで Private Sub Form_Load()  If 元のフォーム名.コンボボックス1=1 then ....... ってな感じです。

arex_santa
質問者

お礼

有難うございます。 最初この方法でやろうと思ったのですが、元のフォーム名を書くと、変数が宣言されていないとエラーになってしまうのです。

  • SpeedKing
  • ベストアンサー率50% (6/12)
回答No.1

はじめまして。 私はフォーム間の値の受け渡しで良く使うのは以下の2つです。 1.フォームを開いて、例えばテキストボックスに代入する 2.フォームのForm_Openイベント時に前のフォームの値を取ってきてテキストボックスに代入する 1の場合、開くフォーム名をform1とすると form1.テキストボックス名.value=me.コンボボックス名.value 2の場合、元のフォーム名をform0とすると me.テキストボックス名.value=form0.コンボボックス名.value でテキストボックスに値を格納できます。 共通Module化を考える場合には以下のようなもので如何でしょうか。OKボタンのクリックイベントに仕込みます。 Public Function OpenForm( _ FormName As String, _ '開くフォーム名 InputControl As String, _ '代入するコントロール名 GetValueForm As String, _ '元のフォーム名 GetValueControl As String, _ '値を取るコントロール名 Optional GetValueFormClose As Boolean = False) 'GetValueFormCloseは元フォームを閉じるかどうかの指定 'フォームを開く DoCmd.OpenForm FormName '開いたフォームに値を代入する Forms(FormName)(InputControl) = _ Forms(GetValueForm)(GetValueControl) '元フォームを閉じる指定があれば閉じる If GetValueFormClose Then DoCmd.Close acForm, GetValueForm End If End Function (エラーハンドルは記載してません)

関連するQ&A

  • アクセスVBAについて

    アクセスのフォームで「所属」というコントロールボックスが「1」のときは「テーブル 1」の値をコンボボックスで参照し、「所属」が「2」のときは「テーブル 2」の値を参照したいのですが、確か、「select case」を使ったと思うのですが、教えてください。

  • Access2002のVBAコンボボックスについて

    お世話になります。 Access2002でフォームを作成しているのですがコンボボックスを使用する際VBAで項目を登録、入力不可にして選択のみできるようにできないのでしょうか? VBAではなくVB6のコンボボックスの場合Styleプロパティに 2(ドロップダウンリスト)を設定したら可能なのですがAccess2002のコンボボックスにはStyleプロパティがありません。 また、ほかの方法が在れば教えていただけませんでしょうか? 以上、よろしくお願いします。

  • Access コンボボックスの複数選択

    Access2007を勉強中の初心者です。 「空白のフォーム」から作成したコンボボックスで、複数選択が可能になるような設定はありませんか? テーブル項目の「ルックアップ」「複数の値を許可」を許したテーブルから作成したフォームでは、コンボボックスで複数の値を選択可能になりますが、「空白のフォーム」から作成した場合にはできないのでしょうか。 リストボックスではスペースをとってしまう為、コンボボックスで行いたいです。 言葉足らずな内容かもしれませんし、大変お手数をおかけしますが、よろしくお願いいたします。

  • Access コンボボックスの次の値に移動

    Microsoft Accessでフォームを作りました。コンボボックス1の値はテーブル1から参照するようになっています。このフォームにボタンを追加して、ボタンを押すとコンボボックスの値が一つ下の値に移動するようにしたいです。どんなコードを書けば良いですか。

  • Accessでの検索について

    Access2003を使用しています。 まだAccessを使い始めて2ヶ月ほどの初心者です。 コンボボックスでの絞り込み検索を行いたいのですが、ネットや友人に借りた参考書を見てもなかなか解決に至らないもので、質問をさせていただきます。 コンボボックスから項目を選択するとそれにあった一覧が出るようにしたいと考えています。「値集合ソース」などの部分はできたのですが、現在は、フォームにおいてコンボボックスから項目を選んでも何も起きない状態です。(あたりまえですが) 私が質問したいところは、「更新後処理」のところなのですが、どのようなVBAコードを記述すればいいのでしょうか? それと勉強のために、VBAの参考になる書籍やサイトなどあれば教えていただきたいと思います。 よろしくお願いします。

  • access追加クエリーでform入力項目値をセットする方法

    Access2002で、システムを構築中です。 いろいろ調べたのですが、初歩的過ぎるのは、意味が理解できてないのか、まったく判らなかったので、教えてください。 FORMから、年4桁をコンボボックスで選択させ、 Aテーブルの項目に、この年項目を追加したレイアウトで、 Bテーブルにデータを追加しようとしています。 Aよりレコードを読み込み、新しい項目にこの画面入力値をセットして全レコード同じ値として追加し、Bテーブルに書き込む処理を、ACCESSのクエリーでやりたいと考えています。 この画面の値のセットの仕方がわからず苦労しています。 動作イメージは、 フォームAのコンボボックスで値1を選択 コマンドボタンを押すと、クリックイベントでVBAへ。 VBA内では、 1 テーブルAから、テーブルBのデータを上記のように編集し、   追加する追加クエリを起動。 2 テーブルAのデータをクリア 以上です。 よろしくお願いします。

  • Access VBA

    Access 2000 についての質問です。 下記のようなフォーム上のコンボボックスで 商品、産地、サイズを選択 →テキストボックスに個数を入力 →見積りボタンをクリック →テキストボックスに合計金額を表示 ----------------------------------------- フォーム  コンボ コンボ コンボ   テキスト  商品  産地  サイズ   個数 ボタン        テキスト 見積り        金額:______円 ----------------------------------------- というものを、下記の表に基づいて作りたいのです。 単価.xls ===================== 商品  産地 サイズ 単価 みかん 和歌山 L  30 リンゴ 青森  M  50 リンゴ 青森  L  70 リンゴ 長野  L  70 ===================== そこで、コンボボックスで選択した値を活かして 単価.xlsの ”単価”の値を利用して テキストボックスに表示したいのですが、 どのように記述すれば使用できるのか?わかりません。 超初心者ですのでわかりやすく教えてください。よろしくお願いします。

  • Accessの選択クエリの選択を切り替えたい

    Accessで、フォームにコンボボックスとサブフォームを作成してコンボボックスで選択したテキストをキーワードにサブフォームに選択クエリを表示させようと考えています。 コンボボックスの項目は、値集合ソースでテーブルを設定して、選択された項目は、my_Text = Me.コンボ1.Textで取得して クエリのSQL文を変更すればいいのかなぁ?って想像しています。 でも、サブフォームに設定したクエリのSQL文の変更の仕方が解りません。どなたか?詳しい方いらっしゃいましたら教えて頂けないでしょうか?宜しくお願い致します。

  • フォームを開くときに、コンボボックスの値を選択(アクセスVBA)

    こんにちは。 アクセスVBAで、フォームを開いたとき (フォームのOpenイベント)に、 コンボボックスの値を選択したいのですが、 どういう方法が、あるでしょうか。 理想は、 フォームのOpenないし、Loadイベント内で、 コンボ0.ItemData(2).Selected と、書くような感じです。 (無論、Selectedは使えませんでした)。 よろしくお願いします。

  • ACCESSのフォームとテーブルの連携について

    ACCESSのフォームとテーブルの連携について 説明がややこしくて大変申し訳ないのですが、教えてください テーブルが1つあります。 そのテーブルを元にフォームが作成されています。 そおフォームの一つのフィールド((コンボボックス)→[テスト]フィールド名とします)でOK と NG と選択できるように値集合ソースを設定しています。 そしてここからが本題なのですが、 そのフォーム上では使用しない(見せたくない)フィールド([いろは]フィールド名とします。)がテーブルに1つあるのですが 例えばフォームの[テスト]に仮に OK と選択して保存したら、 テーブルの[いろは]に 快調 と自動反映させることは可能でしょうか?

専門家に質問してみよう