• ベストアンサー

アクセスVBAで、フォームに情報を表示したい。

アクセス2000のVBAの質問です。どうぞよろしく。 ●「取引銀行」テーブルをつくりました。銀行名、支店名、口座番号を入力してつくりました。 フィールド名も上記の通りです。 ●フォームをつくり、口座番号入力用テキストボックス(テキスト0)、銀行名を表示するテキストボックス(テキスト2)、支店名表示用テキストボックス(テキスト4)の3つを作りました。 ●入力用テキストボックスに1つ口座番号を入れると、その口座番号の銀行名をテキスト2に表示し、支店名をテキスト4に表示するにはどうコーディングすればいいのでしょうか。 Option Compare Database Public db As database Public qd As querydef Private Sub テキスト0_AfterUpdate() Set db = CurrentDb Set qd = db.querydef("SQL_Q") Dim strText As String strText = テキスト0.Text qd.SQL_Q = "SELECT 銀行名 FROM 取引銀行 " _ & "WHERE 口座番号 = '" & strText & "'" Me.RecordSource = "SQL_Q" テキスト2.SetFocus Me!テキスト2.ControlSource = "銀行名" (支店名表示部分は略す) End Sub ある本の例を見て上記のように組んで実行しましたが、銀行名は表示されません(#NAMEのエラー) 入力した口座番号がstrTextにセットされているのは確認できました。 またRecordSourceとControlSourseの区別がよく理解できていません。値集合タイプ、値集合ソースというのはなぜテキストボックスの プロパティにないのでしょうか。

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

  • ベストアンサー
回答No.2

御疲れ様です >●入力用テキストボックスに1つ口座番号を入れると、その口座番号の銀行名をテキスト2に表示し、支店名をテキスト4に表示するにはどうコーディングすればいいのでしょうか。 上記の掲題だけでしたら、下記コードにて実現できると思います '---------------------------------------- Private Sub テキスト0_AfterUpdate() Dim RS As DAO.Recordset Dim strSQL As String If IsNull(Me.テキスト0.Value) = True Then Me.テキスト2.Value = Null Else strSQL = "SELECT 銀行名 FROM 取引銀行 WHERE 口座番号 = '" & Me.テキスト0.Value & "'" Set RS = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot) If RS.EOF = False Then Me.テキスト2.Value = RS("銀行名").Value End If Set RS = Nothing End If End Sub '---------------------------------------- ※参照設定にて「Microsoft DAO Libraryにチェックが必要です たぶん、VisualBasicとの違いに戸惑いを感じているのだと思います。 テキストボックスコントロールなど典型的ですね。 例えば、VBならばNULLは入力できないが、Accessは入力できるとか、 VBなら値参照はTextプロパティをACCESSならValueプロパティを使用するなど... VBとAccessのコントロールは似て非なるものと思った方が理解しやすいと思います。 (かといって、AccessのコントロールをVBに貼り付けても同じような使用方法は出来ないんですけどね...) あと、Accessのテキストボックスのプロパティ「Text」と「Value」の違いですが、 「Text」はフォーカスがあたっている時、表示している値が取得できます、 「Value」は確定した値を取得できます。 参考になれば

imogasi
質問者

お礼

ご丁寧なご解答有難うございました。お礼が遅れて失礼しました。

その他の回答 (1)

回答No.1

いくつか間違いがあるので > Option Compare Database > Public db As database > Public qd As querydef > Private Sub テキスト0_AfterUpdate() > Set db = CurrentDb > Set qd = db.querydef("SQL_Q") Ser qd = db.querydefs("SQL_Q") これを行うためにはあらかじめ「SQL_Q」と言う名前のクエリーを作成しておく 必要があります。(中身は適当で構いません。) > Dim strText As String > strText = テキスト0.Text > qd.SQL_Q = "SELECT 銀行名 FROM 取引銀行 " & "WHERE 口座番号 = '" & strText & "'" qd.SQL = "SELECT 銀行名 FROM 取引銀行 " & "WHERE 口座番号 = '" & strText & "'" > Me.RecordSource = "SQL_Q" > テキスト2.SetFocus > Me!テキスト2.ControlSource = "銀行名" > End Sub レコードソース(RecordSource)はフォーム(レポート)で扱うテーブルやクエリーを指定する項目で コントロールソース(ControlSource)はそのコントロールに表示したい情報を 指定する項目で、式やレコードソース内に存在するフィールド名を指定します。 値集合タイプ、値集合ソースはコンボボックスなどのリスト表示に使用するテーブルなど を指定するための項目です。 テキストボックスに何故無いかと言うことについては、そう言う仕様だからとしか 説明のしようがありません。(少なくとも私には)

関連するQ&A

  • アクセスVBAで3つのテキストボックスの連動表示

    アクセス2000のVBAの質問です。どうぞよろしく。 ●「取引銀行」テーブルをつくりました。銀行名、支店名、口座番号を入力してつくりました。 フィールド名も上記の通りです。 ●フォームをつくり、口座番号入力用テキストボックス(テキスト0)、銀行名を表示するテキストボックス(テキスト2)、支店名表示用テキストボックス(テキスト4)の3つを作りました。 ●入力用テキストボックスに1つ口座番号を入れると、その口座番号の銀行名をテキスト2に表示し、支店名をテキスト4に表示するにはどうコーディングすればいいのでしょうか。 Option Compare Database Public db As database Public qd As querydef Private Sub テキスト0_AfterUpdate() Set db = CurrentDb Set qd = db.querydef(\"SQL_Q\") Dim strText As String strText = テキスト0.Text qd.SQL_Q = \"SELECT 銀行名 FROM 取引銀行 \" _ & \"WHERE 口座番号 = \'\" & strText & \"\'\" Me.RecordSource = \"SQL_Q\" テキスト2.SetFocus Me!テキスト2.ControlSource = \"銀行名\" (支店名表示部分は略す) End Sub ある本の例を見て上記のように組んで実行しましたが、銀行名は表示されません(#NAMEのエラー) 入力した口座番号がstrTextにセットされているのは確認できました。 またRecordSourceとControlSourseの区別がよく理解できていません。値集合タイプ、値集合ソースというのはなぜテキストボックスの プロパティにないのでしょうか。

  • フォームの再表示に関して

    過去の質問にも同じようなものがありましたので、参考にしながらやってみたのですが、うまくいかなかったので質問させて頂きます。 Windows2000・アクセス2000を利用しています。フォーム上で非連結のテキストボックス1つとサブフォームを作成しています。テキストボックスに[No]を入力で指定すると、テキストボックス更新時にサブフォームの内容が、その[No]のデータのみに抽出されて再表示するようにしたいと思っています。 SQLで並べ替えと抽出をしています。コードは下記のような感じで作成しています。 Private Sub 検索No_AfterUpdate() Dim Db As Database Dim Qd As QueryDef Dim No As Integer Dim Sql_Str As String Set Db = CurrentDb Set Qd = Db.QueryDefs("Q_抽出") No = [検索No].Value Sql_Str = "SELECT T_テンプレート明細.*" & _ " FROM T_テンプレート明細 INNER JOIN T_テンプレート ON T_テンプレート明細.テンプレートNo = T_テンプレート.テンプレートNo" & _ " WHERE [T_テンプレート明細].[テンプレートNo] = " & No & _ " ORDER BY [T_テンプレート明細].[テンプレートNo], [T_テンプレート明細].[テンプレートID];" Qd.Sql = Sql_Str サブフォーム名.Requery Qd.Close Db.Close End Sub サブフォームをrequeryすれば再表示するのかなと思っているのですが・・・・テキストボックスに更新をかけた後にクエリを確認するとSQLは一応指定出来ているようです。簡単な説明で分かりにくいかもしれませんがよろしくお願い致します。

  • ACCESSでフォーム入力内容から自動で表示させる

    顧客の口座を管理するものをAccessで作成しています。 顧客テーブルに氏名等の情報があり、別に銀行マスタテーブルとして金融機関の情報がID、銀行コード、銀行名、支店コード、支店名、と入力されているものがあります。 銀行マスタテーブルは以下の形です 銀行コード 銀行名 支店コード 支店名 1 みずほ 1 東京営業部 1 みずほ 4 丸の内中央 1 みずほ 5 丸の内 5 UFJ 5 大阪 あらかじめ、氏名等の情報は入力してあり、これから口座情報を登録していくのですが、フォームに銀行コード、支店コードを入力した際に、その下に配置したテキストボックスに銀行名、支店名を表示させたいと考えています。 銀行コードの方は値が重複しても対応する銀行名は同じなので =DLookUp("[銀行名]","銀行マスタ","[銀行コード] = " & [Forms]![H25]![銀行コード]) でなんとかできたのですが、支店コードは各金融機関毎に割り振られ、重複するものがあるため最上段のものが表示されてしまいます。(UFJの支店コード5を表示させたいのに、みずほの支店コード5が出てきてしまう。) そこで、複数条件で検索できるよう以下のようにしてみたのですが、うまくいきませんでした。 =DLookUp("[銀行名]","銀行マスタ","[銀行コード] = " & [Forms]![H25]![銀行コード]' And 支店コード = #" & [Forms]![H25]![支店コード] "#") イメージとしては、そのフォームに入力した銀行コードかつ支店コードが一致する銀行マスタテーブルの支店名を、フォームに配置したテキストボックスへ表示させれればいいのかなと考えてみたのですが。(上の例で言うと、銀行コードが5で支店コードが5だからテキストボックスに「大阪」と出したい。) 関数でもVBAでも構いませんので、どなたかご教示ください。 よろしくお願いいたします。

  • AccessのVBAにおいて,アクセスフォームに表示されている「値」を

    AccessのVBAにおいて,アクセスフォームに表示されている「値」を変数の中に格納したい。  例えば,オートフォームの単票形式でフォームを作成した場合,「番号」「製品」といったフィールドが2個あるテーブルを使うと,「番号」「製品」という名前のテキストボックスが2個ほどできます。 (フィールド名やテキストボックス名は問題ではありません。) このフォーム上に「ボタン」を配置し,このボタンをクリックした時に,「製品」というテキストボックスの内容を,メッセージボックスで表示させたい。 MsgBox (Me.製品.Text) と書いてもエラーとなります。 実際には,このフォームで欲しいデータを見つけた時,ボタンクリックで,テキストボックスに表示されている内容をグローバル変数に格納したいのですが,方法が分かりません。 Access 初心者です。どなたかよろしくお願いします。

  • AccessでSQL*PlusのようにSQLの結果を表示させたい

    SQLでUPDATE, DELETE, INSERTのような結果セットを返さない場合は、 DoCmd.RunSQL?で済みますが、結果セットを返す場合は、どのようにすればよいのでしょうか? やりたいことは、AccessでSQL*Plusやpsqlのように抽出した結果を一覧に表示させるか、フォームに結果を表示させたいです。 テキストボックスに入力したSQLを クエリオブジェクト?(仮にクエリ1という名前にします)に書き込み それをフォームのRecordSourceにクエリ1をセットする方法が使えれば 単にRecordSourceにSQLを直接書くより早い気がするのですが、 皆さんはどのようにしていますか。

  • ACCESS フォームの入力で

    フォームの入力でコード番号を入力すると項目が自動入力出来るようにしたくて 2つ目のテキストボックスのコントロールソースに=DLookUp("[商品名]","テーブル2","[商品コード] = [コード] ")と入力したのですが 1つ目のテキストボックスに入力すると そのときは2つ目のテキストボックスは白紙で 一度フォームを閉じてから立ち上げると2つ目のテキストボックスにも入力されています。 これは閉じないと入力されないのでしょうか? 1つ目を入力した後に表示されるようにしたいのですが・・・。 よろしくお願いします。

  • フォームに表示したいんですが・・・

    複数の人数の作業時間を入力するフォームを作成しました。 誤って入力したものをフォーム上で訂正したいので非連結のテキストボックスを 2つ作成しクエリーの「作業日」と「社員番号」のフィールドの抽出条件をforms![フォーム名]![テキストボックス名]としました。 フォームの2つのテキストボックスに「日付」と「社員番号」を入力すると1レコードが表示されました。 間違いを探すのに1日1日入力するのは手間なので、例えばAさんの1年分の レコードから1月1日から1月31までの31レコードをフォームに表示させるにはどうすればよいのでしょうか? いろいろやってみたんですがうまく出来ませんでした。 うまく説明できませんがよろしくお願いいたします。

  • アクセスでクロス集計をレポートにする方法

    一応過去質問を調べましたがうまくいかず、よろしくお願いします。 3種類のテーブルをもとに、それぞれについて3種類のクロス集計を行い、 その3つのクエリを一つのクエリにしました。この選択クエリを作る際は、 *をドラッグして全てのフィールドを表示させています。 そのクエリをレコードソースとして、 空のラベル、テキストボックスを必要数置いて以下のようにレポートを作成しましたが、うまくいきません。 どなたか、ご指導ください。 Private Sub Report_Open(Cancel As Integer) Dim db As DAO.Database Dim qd As DAO.QueryDef Dim cnt As Integer Dim fld As DAO.Field Set db = CurrentDb() Set qd = db.QueryDefs(Me.RecordSource) For cnt = 1 To qd.Fields.Count - 1 Set fld = qd.Fields(cnt) Me("Label" & cnt).Caption = fld.Name Me("Field" & cnt).ControlSource = fld.Name Next End Sub

  • 口座番号等を入力すれば名義が表示されるネットバンク

    銀行のATMみたいに、銀行名と支店名と口座番号を入力すれば口座名義が自動的に表示されるネットバンクはありますか?

  • アクセス Dlookup関数の表示が更新されない

    access2000です。 データ入力用のフォームでDlookupを使い、あるテキストボックスに商品番号を入力すると、隣のテキストボックスに、商品番号からテーブルを検索して該当する商品名を表示するようにしました。 商品番号を入力するテキストボックスには更新後処理でリクエリするマクロを設定しています。 ところが、番号を入力してenterを押し次のテキストボックスにカーソルが移動しても商品名が出るはずのテキストボックスに何も表示されません。 しかし、クリックして商品名のテキストボックスをカーソルを移動した瞬間にちゃんと表示されるのです。 今までに何度かこの方法でうまくいっているので、原因がつかめません。超初心者の質問ですがよろしくお願いいたします。

専門家に質問してみよう