- ベストアンサー
VBAコマンドDoCmd.OpenFormの引数について
- ACCESS VBAのコマンドDoCmd.OpenFormを使用して、特定のフォームを開く際に、引数の指定方法についてわからないという質問です。
- テーブルに2つの項目で主キーを構成しており、VBAコマンドを使用して登録画面を開きたい場合、引数の記述方法について困っています。
- 主キーが1つの場合は正常に表示できますが、主キーが2つの場合、データが表示されずに空白のままです。具体的な引数の記述方法がわかりません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
遅くなりましたが、以下の記述ではどうでしょうか? (長すぎて、勝手に改行されていますが、一行にして試してください) DoCmd.OpenForm "F運転手割当登録", acNormal, , "W業務依頼日 = " & CDate(Me![lstWariate].Column(0)) & " And " & "W使用車両 = " & Me![lstWariate].Column(1)
その他の回答 (4)
- tohru999
- ベストアンサー率49% (76/154)
"W使用車両 = " & Me![lstWariate].Column(1) の部分を "W使用車両 = '" & Me![lstWariate].Column(1) & "'" と変えたらどぉなんでしょう? (シングルクォーテーションで囲む) ※いまいち、パラメータ入力のダイアログが表示されてしまうのが理解できてませんが、打開策になれば...
お礼
tohru999様へ ありがとうございます! ご指摘の修正を施したところ とうとう完璧に動作しました。 本当に真摯に対応して頂きありがとうございました。
- temtecomai2
- ベストアンサー率61% (656/1071)
手元に Access がないので具体的な回答は何もできませんが、気が付いたところを。 lstWariate の構成について詳しく説明する必要があります。 恐らく複数列のリストボックスになっていて、"W業務依頼日" の列や "W使用車両" の列があるのかと思いますが・・・
お礼
助け舟を出して頂いてありがとうございます。 現在の私のレベルでは、No1やNo2の回答者のアドバイスを 正確に理解したり検証したりすることができずに お礼の返答ができないでいるところでした。 ●リストBOXの構成は3列(3項目)からなります。 テーブル名: T運転手割当 1)W業務依頼日 <=主キー 2)W使用車両 <=主キー 3)W運転手番号 と同じ構成です。 No1の tohru999さんのご指摘の 「その前に、W業務依頼日とW使用車両に、同じ値を代入していますが(Me![lstWariate].Value)、 それは正解なのですか?」や No2の s_huskyさんのご指摘の 「lstWariate は、割り当てた情報を記録したレコードを特定する一意の長整数かと思います。 それと、W業務依頼日、W使用車両とは無関係かと思われます。」 の部分が私の理解の出来ていない部分です。 リストBOXに表示される、登録済みデータの『一つ』を選択して DoCmd.OpenForm コマンドをキックする訳ですから、 私の当初の質問の「2項目を主キー」とするファイルを開くからといって 抽出条件は主キーの2つを条件比較するというのは、ピントがずれていると 言われてもその通りだと思います。 が、・・・・・・。 何をどのように質問したらよいのかも分からず、お手上げ状態です。 質問の仕方そのものが要領を得ていない、というのは 私の勉強不足、経験不足ですので、不快に思われた方はお許しください。
ウーン! 全く、書かれていることがチンプンカンプンです。 lstWariate は、割り当てた情報を記録したレコードを特定する一意の長整数かと思います。 それと、W業務依頼日、W使用車両とは無関係かと思われます。 仮に、割り当てた情報を記録したレコードを特定する一意の主キーが、W業務依頼日、W使用車両以外に存在しないのであれば、それを用意すべきかと・・・。
- tohru999
- ベストアンサー率49% (76/154)
DoCmd.OpenForm "F運転手割当登録", acNormal, , "W業務依頼日 = " & Me![lstWariate].Value & " And " & "W使用車両 = " & Me![lstWariate].Value では、どうでしょうか? その前に、W業務依頼日とW使用車両に、同じ値を代入していますが(Me![lstWariate].Value)、それは正解なのですか? また、2つは文字列として定義されてますか? 日付型ならば、# で囲まないとダメなんで。(例 : #2006/08/20#)
補足
回答して頂きありがとうございました。 回答者No3の temtecomai2 さんより質問の仕方についてアドバイスが ありましたので、少々修正させて頂きます。 リストボックスを使って、データの検索結果を表示して その中の1つのデータを選択してから DoCmd.OpenForm コマンドを 実行し、F運転手割当画面を表示したいと考えています。 ●リストBOXの構成は 1)W業務依頼日(日付型) <=主キー 2)W使用車両 (テキスト型)<=主キー 3)W運転手番号(数値型) (テーブル名: T運転手割当と全く同じ構成です。) ●リスト名は lstWariate (Me![lstWariate].Value)には、リストボックスの選択された データを特定する「何らかの値」が入っていると思うのですが この値と何を比較すれば、 DoCmd.OpenForm コマンドは 正常に動作するのでしょうか? リストボックスについての情報提供が不足してるようでしたら ご指摘ください。 よろしくお願いします。
補足
tohru999様のアドバイスにより、大幅に改善されました。 日付の比較のところのCDate関数をとって比較しました。 DoCmd.OpenForm "F運転手割当登録", acNormal, , "W業務依頼日 = #" & (Me![lstWariate].Column(0)) & "# And " & "W使用車両 = " & Me![lstWariate].Column(1) 症状としては、リストボックスのデータを1つ選択して、 コマンドボタンを押すと、『パラメータの入力 *****』という ダイアログボックスが表示されました。 *****の部分は、選択したデータのW使用車両に該当する値が 表示されていました。 この状態で、*****と同じデータを手入力すると 選択したデータの値を表示した、F運転手割当登録 画面に移行しました。 『パラメータ入力』のダイアログボックスさえ出なければ100点満点です。 私の経験上、『パラメータの入力』ダイアログボックスが表示される場合は 項目名の誤りである可能性が高いので、見直しをしているのですが・・・・。 tohru999様のアドバイスにより大きなヤマ場を超えつつあります。 ありがとうございました。 Me![lstWariate].RowSource = "SELECT W業務依頼日 AS 業務依頼日,W使用車両 AS 使用車両,W運転手番号 AS 運転手番号 " & _ "FROM T割当運転手 " & _ strWhere & " " & _ "ORDER BY W業務依頼日,W使用車両" ※リストボックス lstWariate の値集合ソースにSELECT文を突っ込んでいる部分です。 ※strWhere には入力された検索値が条件式の形の文字列としてセットされます。