プロが教えるわが家の防犯対策術!

2つの項目で主キーを構成するテーブルを定義しました。
この場合、VBA コマンドを使って登録画面を開く為の
コマンドの引数の指定方法がわかりません。

テーブル名: T運転手割当
1)W業務依頼日 <=主キー
2)W使用車両  <=主キー
3)W運転手番号


DoCmd.OpenFormの書式
■第4引数 WhereCondition/レコード抽出条件(省略可能)
テーブルやクエリと連結しているときのレコード抽出条件を指定します。

1)仮に主キーが1つの時、以下の表記で正常に表示されます。
'フォームを開く
DoCmd.OpenForm "F運転手割当登録", acNormal, , "W業務依頼日 = " & Me![lstWariate]


2)主キーが2つの時、以下の表記ではF運転手割当画面は表示されるのですが、
肝心のデータがセットされずに空白で表示されます。
'フォームを開く
DoCmd.OpenForm "F運転手割当登録", acNormal, , ("W業務依頼日 = " & Me![lstWariate]) & " And " & ("W使用車両 = " & Me![lstWariate])


[lstWariate]とは、データの検索画面で検索結果を表示するリストボックスの名称です。
検索結果から該当データを選択して、個別データの修正画面に移行したいのですが・・・。

Me![lstWariate]の表記が良くないのだと思うのですが、具体的な表記方法が分かりません。
よろしくお願いします。

A 回答 (5件)

遅くなりましたが、以下の記述ではどうでしょうか?


(長すぎて、勝手に改行されていますが、一行にして試してください)

DoCmd.OpenForm "F運転手割当登録", acNormal, , "W業務依頼日 = " & CDate(Me![lstWariate].Column(0)) & " And " & "W使用車両 = " & Me![lstWariate].Column(1)

この回答への補足

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 には入力された検索値が条件式の形の文字列としてセットされます。

補足日時:2006/08/22 22:59
    • good
    • 1

"W使用車両 = " & Me![lstWariate].Column(1)


の部分を
"W使用車両 = '" & Me![lstWariate].Column(1) & "'"
と変えたらどぉなんでしょう?
(シングルクォーテーションで囲む)

※いまいち、パラメータ入力のダイアログが表示されてしまうのが理解できてませんが、打開策になれば...
    • good
    • 0
この回答へのお礼

tohru999様へ
ありがとうございます!
ご指摘の修正を施したところ
とうとう完璧に動作しました。
本当に真摯に対応して頂きありがとうございました。

お礼日時:2006/08/23 03:21

手元に Access がないので具体的な回答は何もできませんが、気が付いたところを。



lstWariate の構成について詳しく説明する必要があります。
恐らく複数列のリストボックスになっていて、"W業務依頼日" の列や "W使用車両" の列があるのかと思いますが・・・
    • good
    • 0
この回答へのお礼

助け舟を出して頂いてありがとうございます。
現在の私のレベルでは、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つを条件比較するというのは、ピントがずれていると
言われてもその通りだと思います。 が、・・・・・・。

何をどのように質問したらよいのかも分からず、お手上げ状態です。
質問の仕方そのものが要領を得ていない、というのは
私の勉強不足、経験不足ですので、不快に思われた方はお許しください。

お礼日時:2006/08/20 22:59

ウーン!


全く、書かれていることがチンプンカンプンです。

lstWariate は、割り当てた情報を記録したレコードを特定する一意の長整数かと思います。
それと、W業務依頼日、W使用車両とは無関係かと思われます。

仮に、割り当てた情報を記録したレコードを特定する一意の主キーが、W業務依頼日、W使用車両以外に存在しないのであれば、それを用意すべきかと・・・。
    • good
    • 0

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 コマンドは
正常に動作するのでしょうか?

リストボックスについての情報提供が不足してるようでしたら
ご指摘ください。
よろしくお願いします。

補足日時:2006/08/22 00:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す