access レコードソースを選択し、DoCmd.OpenFormする方法

このQ&Aのポイント
  • Select Caseのフレームで、レコードソース(クエリ)を選択し、そのソースを基にDoCmd.OpenFormする方法がわかりません。
  • クエリ1,クエリ2は基になるテーブルが違いますが、フィールドは同一にしてあります。フォーム1には、対応するテキストボックスは用意してあります。
  • フォーム1のフレーム1の値に応じて、ソースを切り替えてDoCmd.OpenFormする方法について教えてください。
回答を見る
  • ベストアンサー

access レコードソースを選択し、DoCmd.OpenFormする方法

Select Caseのフレームで、レコードソース(クエリ)を選択し、 そのソースを基にDoCmd.OpenFormする方法がわかりません。 よろしくお願いします。 ---------------------------------------------------- Dim strSource As String Dim Q1, Q2 As String Dim stDocName As String Dim フォーム1 As Form stDocName = "フォーム1" Q1 = "クエリ1" Q2 = "クエリ2" Select Case フレーム1 Case 1 strSource = Q1 Case 2 strSource = Q2 End Select 'stDocName.RecordSource = strSource '-----この文はこの位置でよいのでしょうか? DoCmd.OpenForm stDocName, acFormDS ---------------------------------------------------- クエリ1,クエリ2は基になるテーブルが違いますが、フィールドは同一にしてあります。 ですのでフォーム1には、対応するテキストボックスは用意してあります。

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

  • ベストアンサー
noname#140971
noname#140971
回答No.1

<1> Private Sub コマンド0_Click()   DoCmd.OpenForm "フォーム1", acFormDS   Forms("フォーム1").RecordSource = "クエリ" & Me.フレーム1 End Sub <2> Private Sub コマンド1_Click()   DoCmd.OpenForm "フォーム1", acFormDS, , , , , "クエリ" & Me.フレーム1 End Sub ' ------------------------------------------ ' [フォーム1] ロード時にレコードソース設定 ' ------------------------------------------ Private Sub Form_Load()   If Len(Me.OpenArgs & "") > 0 Then     Me.RecordSource = Me.OpenArgs   End If End Sub まあ、好き好きでしょうが<2>がOKのバージョンであれば<2>がお勧めです。 <補足> ただ、WhereCondition を使うのが一般的かと思います。 全く異なるクエリであれば、それぞれに対応したフォームを用意した方がシンプルでは・・・。

PearlJam69
質問者

お礼

ありがとうございました。 この方法は、確かに一般的ではないようですね。 質問に際し省略したのですが、条件は6個あり、また抽出したものを、 Excel出力、印刷と使用するため、この方法を取ろうと考えた次第です。

関連するQ&A

  • ウイザードからのVBAでクエリー名をコードでなく文字にするには

    マシンによっては、以下の2の形式でウイザードを使ったVBAで表示されるのですが 1の形のマシンがありどこの設定をすればよいか教えてください ACCESSXPです。 1.コードになっている Dim stDocName As String Dim stLinkCriteria As String stDocName = ChrW(-30163) & ChrW(23450) & ChrW(12501) & ChrW(12457) & ChrW(12540) & ChrW(12512) DoCmd.OpenForm stDocName, , , stLinkCriteria 2、日本字になっている Dim stDocName As String Dim stLinkCriteria As String stDocName = "設定フォーム" DoCmd.OpenForm stDocName, , , stLinkCriteria よろしくお願いします

  • ACCESSフォームフィルタで抽出したデータのみをレポートで表示する方法

    フォームフィルターでデータを抽出した後,抽出されたデータのみをレポート上に表示させるコマンドボタンをフォーム上に作っています。 下記のコードを作成しましたが,これだと抽出前の全部のデータが表示されてしまいます。 どうしたら良いでしょうか。 Private Sub ラベルプレビュー_Click() Dim stDocName As String DoCmd.Echo False, stDocName = "rpt宛名ラベル" DoCmd.OpenReport stDocName, acViewDesign DoCmd.SelectObject acReport, stDocName, False ' Reports(stDocName).RecordSource = Me.RecordSource DoCmd.OpenReport stDocName, acViewPreview End Sub

  • Access DoCmd.OpenFormの引数

    現在Access VBAを勉強中の者です。 DoCmd.OpenForm については、同じQ&Aがありますが回答内容の意味が理解できず応用が利きません。 具体的には、 DoCmd.OpenForm "フォーム名", , , "商品番号 = '" & Me!商品番号 & "'" における、Where句の「"」と「'」の使い方です。 私の情報収集では、   (1)文字列は「"」で囲む。   (2)Where句は「"」で囲む。   (3)「"」の囲みが重複したら内側を「'」に変更する。 なのですが、(2)と(3)は上記の例からでは理解に苦しみます。 DoCmd.OpenForm のWhere句の「"」と「'」の使い方についてその仕様を教えて下さい。

  • access2000で作成のプログラムソースが2003で書き換わってしまう

    初めて質問させていただくバイク好きのおじさんです。 環境はOS:Windows7(Ultimate) ソフトウエア:Office2003(pro) ソフトウエア:Office2007(Ultimate) access2000で作成されたプログラムをaccess2003で今まで問題なく利用していたのですが、パソコンを変えてWindows7で利用するようになってから どのコマンドボタンをクリックしても 「イベント プロパティに指定した式 クリック時でエラーが発生しました:名前が適切ではありません:コマン_Click」というエラーで動かなくなってしまいました。 ビューモードでコマンド割り当てのソースをみてみると access2007(エラーが出ない方)抜粋では Private Sub コマンド5_Click() On Error GoTo Err_コマンド5_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_選手練習(メイン)" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_コマンド5_Click: Exit Sub Err_コマンド5_Click: MsgBox Err.Description Resume Exit_コマンド5_Click End Sub access2003 (エラーの起きる)抜粋では Private Sub コマン_Click() On Error GoTo Err_コマン_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_会員管理(参照用)" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_コマン_Click: Exit Sub Err_コマン_Click: MsgBox Err.Description Resume Exit_コマン_Click End Sub のようにソースのコマンドの割り当ての「 ド5 」が抜けてしまい、正しい方からコピーペースとしても内容が正しく書き換わりません。(全てのコマンドボタンの ド○ ) 対処法がさっぱりわからず困っております。 どなたか解決方法を知って見える方、アドバイスをいただけたらうれしいです。よろしくお願いいたします。

  • Access2000でフォームを開くときに常に新規レコードで開きたいのですが

    Access2000で、あるイベントに参加した人のデータベースを作りました。 検索用フォームで「氏名」と「生年月日」で検索し、その人の情報を別の フォームで見ることができるようになっています。 該当者がいない場合は、新しいレコードにそのデータを追加します。 検索結果を表示するフォームに個人情報を表示・書き込みできる画面を開く ためのボタンがあるのですが、このボタンをクリックした時に、常に新規 レコードで開きたいのですが、コードはどのように記述すればよろしいの でしょうか? ちなみに、いまは下記のようなコードになっています。 「新規登録ボタン」は個人情報を表示・書き込みできる画面を開くためのボタン 「応募者」は個人情報を表示・書き込みできるフォーム です。 Private Sub 新規登録ボタン_Click() On Error GoTo Err_新規登録ボタン_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "応募者" DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_新規登録ボタン_Click: Exit Sub Err_新規登録ボタン_Click: MsgBox Err.Description Resume Exit_新規登録ボタン_Click End Sub

  • Access:ストアドプロシージャの作成後にそれをレコードソースとしたフォームを開きたい

    WINDOWS XP ACCESS 2002 MSDE を使用しています。 ADOでストアドプロシージャを作成して 作成したストアドプロシージャをレコードソースとしたフォームを開こうとしたところ エラーが発生してしまいます。 以下、ソースを大まかに示します '------------------------------------------------- sub test_Click() On Error GoTo err_test Dim Dname As New ADODB.Connection Dname.Open Dname.Execute "CREATE PROCEDURE q AS " + vbCrLf + _ " SELECT a FROM b WHERE (c = 1) ORDER BY d DoCmd.OpenForm "F" , Exit Sub err_test: MsgBox "err : " + Err.Description End Sub '------------------------------------------------- 開こうとしているフォーム"F"のレコードソースには 作成したストアドプロシージャ"q" を指定しています。 DoCmd.OpenForm で以下のエラーが発生します。 エラー番号は"2580" メッセージは"このフォームまたはレポートで指定されているレコード ソース 'q' は存在しません。" Access再起動して、ストアドプロシージャを作成せずにフォームを開くと フォームは開けるのですが、 作成した直後にフォームを開きたいと考えております。 なにが原因なのでしょうか? ご回答のほど、何卒よろしくお願いいたします。

  • 部分一致での検索方法

    Access2000のVBAで3つのオプションボタンでフィールドを選択し、1つのテキストボックス(オプションテキスト)に文字列を入力して検索ボタンで検索するプログラムを以下のような記述の仕方で作成しました。 完全一致した場合は問題なく表示されるのですが、できればテキストボックスに入力した文字列が部分一致した場合でも表示させるようにしたいのですが、どうすればよいかがわからないので教えてください。 Private Sub オプション検索_Click() Dim stFilter As String Dim stDocName As String If 特定検索 = 1 Then stDocName = "フォーム名"   stFilter = "フィールド名1='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , ElseIf 特定検索 = 2 Then stDocName = "フォーム名" stFilter = "フィールド名2='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilter ElseIf 特定検索 = 3 Then stDocName = "IPForm" stFilter = "フィールド名3='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilterOn End If End Sub

  • ACCESS フォームの値がすぐに表示されない

    フォームの値がすぐに表示されない。 宜しくお願い致します。皆様の知恵をお貸しください。 WinXPでACCESS2000を使っております。 テーブル_在庫には 取引先|商品名|買取金額|売上金額|日付のフィールドがあり A社|みかん|0|10000|2012/11/13 A社|りんご|10000|0|2012/11/13 B社|ぶどう|5000|0|2012/11/13 C社|かき|0|3000|2012/11/13 というレコードがあります。 フォーム_取引先のコンボボックスで、A社を選びコマンドボタンで、 クエリ_取引先買取、クエリ_取引先売上 を実行して、A社だけの取引を抽出し、その結果を フォーム_取引先買取とフォーム_取引先売上 に、表形式で表示させています。 このままでは、フォームが2つになるので、新たに基になるテーブルも クエリも持たない、フォーム_売買を作りました。 このフォーム_売買にテキストボックスを6つ作り次のようにしました。 テキストボックス|コントロールソース ---------------------------------------- テキスト1(取引先)|=Forms![取引先]![コンボ1] テキスト2(買取金額)|=Forms![買取]![テキスト1] テキスト3(売上金額)|=Forms![売上]![テキスト1] テキスト4(買取報償料)|非連結 テキスト5(売上報償料)|非連結 テキスト6(合計金額)|=[テキスト2]+[テキスト4]-[テキスト3]-[テキスト5] ここで、問題になっているのが、フォーム_売買を表示させた時に、テキスト1は 普通にA社と表示されているのですが、テキスト2とテキスト3に金額が表示され ません。 しかし、テキスト4もしくはテキスト5に金額を入力すると、表示されるようになり ます。 テキスト4とテキスト5のどちらかには必ず金額を入力するので、このままでも とりあえずは計算出来ているのですが、できれば、フォームが表示された時に 初めからテキスト2とテキスト3には金額が入っていたほうがいいと思い、あれ これ試してみたのですが、出来ませんでした。 フォーム_取引先のコマンドボタンは次のように実行しています。 Dim stDocName As String Dim stDocName1 As String stDocName = "取引先売上" DoCmd.OpenQuery stDocName, acNormal, acEdit stDocName1 = "取引先買取" DoCmd.OpenQuery stDocName1, acNormal, acEdit DoCmd.OpenForm stDocName, acNormal DoCmd.OpenForm stDocName1, acNormal DoCmd.OpenForm "売買", acNormal どうすれば、フォーム_売買が表示された時に、テキスト2とテキスト3に金額が 入っているようになるのでしょうか。 素人が見よう見まねで作っておりますので、おかしい点が多々あるかと思い ますが、ご教授のほど、よろしくお願い致します。

  • ACCESS レコードセット

    非連結フォーム(frm_B)のOPEN時にADOレコードセットでデータを表示させ、更新ボタンを押すと、追加クエリでそのフォーム上で表示されたデータをテーブル(tbl_B)に新規登録させ、さらにその非連結フォームには別のフォームの内容を表示させるVBAを書きましたが、最後に別のフォームの内容で非連結フォームにデータをセットしたとき?にテーブルのデータも更新されてしまいます。最初にテーブルに追加したデータとは切り離したいのですがどうすればうまくいくのでしょうか。 ・フォームfrm_BをOPEN 'DAOレコードセット Dim dbDAO As DAO.Database Dim rsDAO As DAO.Recordset Dim stSQL As String stSQL = "SELECT No.,規格No.,改訂No. FROM tbl_B " _ & "WHERE 規格No. ='" & Forms![frm_A].[規格No.] & "'" _ & "AND 改訂No. =" & Forms![frm_A].[改訂No.] & "" 'DAOレコードセット Set dbDAO = CurrentDb Set rsDAO = dbDAO.OpenRecordset(stSQL) Set Me.Recordset = rsDAO Me![No.].ControlSource = "No." Me![規格No.].ControlSource = "規格No." Me![改訂No.].ControlSource = "改訂No." 'DAOレコードセットクローズ Set rsDAO = Nothing Set dbDAO = Nothing ・更新ボタンクリック Private Sub cb_kaitei_Click() Dim stDocName As String   '追加クエリ stDocName = "q_B" DoCmd.OpenQuery stDocName, acNormal, acEdit Forms![frm_B].SetFocus Me![No.] = Forms![frm_A].[No.] Me![規格No.] = Forms![frm_A].[規格No.] Me![改訂No.] = Forms![frm_A].[改訂No.] ・ このときにレコードセットで追加したレコードのほうも更新されてしまいます。これを別のレコードと判断させたいのです。よろしくお願いします。

  • VBAでのj検索

    Access2000のVBAで18つのチェックボタンでフィールドを選択し、1つのテキストボックスに文字列を入力して検索ボタンで検索するプログラムを以下のような記述の仕方で作成しました。 Private Sub 条件検索_Click() Dim stFilter As String Dim stDocName As String If 特定検索 = 1 Then stDocName = "メイン" stFilter = "フィールド名1='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilter ElseIf 特定検索 = 2 Then stDocName = "メイン" stFilter = "フィールド名2='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilter ・ ・ 上記のような記述で上手くいかないので、部分一致で検索 出来る方法を教えていただけませんでしょうか。 よろしくお願い致します。

専門家に質問してみよう