• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS VBA コマンドDoCmd.OpenFormの引数)

VBAコマンドDoCmd.OpenFormの引数について

このQ&Aのポイント
  • ACCESS VBAのコマンドDoCmd.OpenFormを使用して、特定のフォームを開く際に、引数の指定方法についてわからないという質問です。
  • テーブルに2つの項目で主キーを構成しており、VBAコマンドを使用して登録画面を開きたい場合、引数の記述方法について困っています。
  • 主キーが1つの場合は正常に表示できますが、主キーが2つの場合、データが表示されずに空白のままです。具体的な引数の記述方法がわかりません。

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

  • ベストアンサー
  • tohru999
  • ベストアンサー率49% (76/154)
回答No.4

遅くなりましたが、以下の記述ではどうでしょうか? (長すぎて、勝手に改行されていますが、一行にして試してください) DoCmd.OpenForm "F運転手割当登録", acNormal, , "W業務依頼日 = " & CDate(Me![lstWariate].Column(0)) & " And " & "W使用車両 = " & Me![lstWariate].Column(1)

smile0088
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • tohru999
  • ベストアンサー率49% (76/154)
回答No.5

"W使用車両 = " & Me![lstWariate].Column(1) の部分を "W使用車両 = '" & Me![lstWariate].Column(1) & "'" と変えたらどぉなんでしょう? (シングルクォーテーションで囲む) ※いまいち、パラメータ入力のダイアログが表示されてしまうのが理解できてませんが、打開策になれば...

smile0088
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

手元に Access がないので具体的な回答は何もできませんが、気が付いたところを。 lstWariate の構成について詳しく説明する必要があります。 恐らく複数列のリストボックスになっていて、"W業務依頼日" の列や "W使用車両" の列があるのかと思いますが・・・

smile0088
質問者

お礼

助け舟を出して頂いてありがとうございます。 現在の私のレベルでは、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つを条件比較するというのは、ピントがずれていると 言われてもその通りだと思います。 が、・・・・・・。 何をどのように質問したらよいのかも分からず、お手上げ状態です。 質問の仕方そのものが要領を得ていない、というのは 私の勉強不足、経験不足ですので、不快に思われた方はお許しください。

全文を見る
すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.2

ウーン! 全く、書かれていることがチンプンカンプンです。 lstWariate は、割り当てた情報を記録したレコードを特定する一意の長整数かと思います。 それと、W業務依頼日、W使用車両とは無関係かと思われます。 仮に、割り当てた情報を記録したレコードを特定する一意の主キーが、W業務依頼日、W使用車両以外に存在しないのであれば、それを用意すべきかと・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • tohru999
  • ベストアンサー率49% (76/154)
回答No.1

DoCmd.OpenForm "F運転手割当登録", acNormal, , "W業務依頼日 = " & Me![lstWariate].Value & " And " & "W使用車両 = " & Me![lstWariate].Value では、どうでしょうか? その前に、W業務依頼日とW使用車両に、同じ値を代入していますが(Me![lstWariate].Value)、それは正解なのですか? また、2つは文字列として定義されてますか? 日付型ならば、# で囲まないとダメなんで。(例 : #2006/08/20#)

smile0088
質問者

補足

回答して頂きありがとうございました。 回答者No3の temtecomai2 さんより質問の仕方についてアドバイスが ありましたので、少々修正させて頂きます。 リストボックスを使って、データの検索結果を表示して その中の1つのデータを選択してから DoCmd.OpenForm コマンドを 実行し、F運転手割当画面を表示したいと考えています。 ●リストBOXの構成は 1)W業務依頼日(日付型)  <=主キー 2)W使用車両 (テキスト型)<=主キー 3)W運転手番号(数値型) (テーブル名: T運転手割当と全く同じ構成です。) ●リスト名は lstWariate (Me![lstWariate].Value)には、リストボックスの選択された データを特定する「何らかの値」が入っていると思うのですが この値と何を比較すれば、 DoCmd.OpenForm コマンドは 正常に動作するのでしょうか? リストボックスについての情報提供が不足してるようでしたら ご指摘ください。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ACCESS VBAのOpenForm書き方

    ACCESS VBAについて教えてください。 DoCmd.OpenFormのWhereConditionの部分の記述がわからないのです。 1つの条件の場合は問題なく表示できたのですが、複数条件にすると「抽出条件でデータ型が一致しません。」とエラーになってしまいます。 なぜでしょうか? このように記述しています。 DoCmd.OpenForm "会員データ", , , "種別 = '" & Me![種別] & "' AND 会員番号 = '" & Me![会員番号] & "'" 種別、会員番号ともに数値データです。

  • アクセスOpenForm 引数FilterName

    テーブルをレコードソースとしているフォームがあるのですが そのテーブルのtestフィールドに値がいくつかはいっていて、「い」と言う値を抽出した状態で フォームを開きたいのですが Sub test() DoCmd.OpenForm "フォーム1", acNormal, "test ='い'" End Sub これは、意味がないのですか? このコードを実行してフォームを開いても、 testにフィルタは適用されない状態で開きます。 また、ヘルプのFilterNameの項目を見ると ------------------------------------------- 有効なSQLWHERE句を文字列式で指定します。 ただし、WHEREという語を指定する必要はありません。 ------------------------------------------- と書いてありますが、"test ='い'"と言う記載の仕方は間違っていますか? Private Sub Form_Load() Me.Form.Filter = "test ='い'" Me.Form.FilterOn = True End Sub だと、フィルタが適用されます。 OpenForm メソッドを使ってフィルタを適用する方法を教えてください。

  • DoCmd.OpenFormパラメータが表示される

    いつもお世話になっています。 DoCmd.OpenFormで条件に合致するフォームが開く以下のコードを作成して使っています。 Private Sub send_Click() DoCmd.OpenForm "集計", acFormDS, , "[支所] =" & Me.支所 & " And [部署] =" & Me.部署, , acHidden End Sub [部署]はこれまで数値で表していましたが、テキストを使用することになりました。 上記のプロシージャを実行すると[部署] のところにパラメータが表示されて 入力すると指定の支所と部署のデータが表示されます。 別の質問で、テキスト型を検索する記述方法は教えていただいて解決したのですが、 パラメータを表示せずに上記の式に反映するにはどうしたらいいのでしょうか。 型は数値型からテキスト型に変更しています。 お力添えをお願いいたします。

  • DoCmd.Transferで更新できませんか

    DoCmd.Transferで更新できませんか Access 2010を使っています。 DoCmd.TransferText acImportDelimを使ってCSVデータを取り込んでいます。 とても便利なのですが、更新もしてくれないかなと思い始めました。 例えば、テーブルに主キーを設定して、CSVを取り込んだ時に主キーをもとに 更新をおこなってくれないかなと思っています。 DoCmd.TransferTextではできなさそうですが、何か簡単にやる方法はないでしょうか?

  • DoCmd.ApplyFilter引数を文字にする

    いつもお世話になっています。 以下のフィルタを作成して使っています。 Private Sub to12_Click() DoCmd.ApplyFilter , "([部署コード] = 1 And [社員番号]=2)" DoCmd.OpenForm "F_登録" Set Forms!F_登録.Recordset = Me.Recordset End Sub DoCmd.ApplyFilter , "([部署コード] = 1 And [社員番号]=2)" の [社員番号]にテキストを使用することになりました。 元テーブルも数値型からテキスト型に変更したのですが、 こうした検索の式に反映するにはどうしたらいいのでしょうか。 お力添えをお願いいたします。

  • VBAのopenformについて

    はじめまして。 現在、Accessを仕事で使うために勉強中です。 使用しているOSはWindowsXP、Accessは2003を使用しています。 顧客管理のデータベースのようなものを練習で作っているのですが、 作成した一覧のフォームから顧客コードを元に別のフォームを開けるように したいのですが、うまくいきません。 フォーム1:顧客一覧 フォーム2:顧客登録画面 このフォーム1とフォーム2は、同じテーブルを元にしたフォームです。 フォーム1の「顧客コード」というところをダブルクリックすると、該当の顧客コードの フォーム2が開くようにしたいと思い、フォーム1のテキストボックスに、 Private Sub 顧客コード_DblClick(Cancel As Integer) DoCmd.OpenForm "顧客登録", , , "[顧客コード] ='" & Me![顧客コード] & "'" End Sub と記載しましたが、いざ実行をすると 「OpenFormアクションの実行はキャンセルされました」 と表示されてしまいます。 どのようにしたら、この現象が回避でき希望する動きができるのかわからず悩んでおります。 すみませんが、解決する方法を教えていただければと思います。 宜しくお願いいたします。

  • Accessの検索フォーム

    以前にも似たような質問をして、その時は解決したのですが、また同じようなことでつまづいて、以前の回答をみて、 そのとおりにやってるつもりなのに、できなくて…。 テーブル1とフォーム1・フォーム2があります。 フォーム1に入力された情報をもとに、テーブル1の内容を検索して、フォーム2に表示するものを作成しています。 テーブル1には「***.***.**.☆」(情報)という形の情報が入っています。 *の部分の桁数は固定で☆は不定形です。(テキスト形式) フォーム1に入力された情報は「(***.***.)**.*」(検索1)や「(***.***.)**.**」(検索2)などです。 ※()内は入力せず テーブル1の情報の9文字目以降と、フォーム1に入力された情報を比べたくて、以下のようなものを作成しました。 (多少省略等があります) condKensaku = "(Mid(Val(テーブル1.情報),9) between " & Val(Me!検索1.Value) & " and " & Val(Me!検索2.Value) & ")" wherecond = condKensaku DoCmd.OpenForm "フォーム2", acNormal, WhereCond これを実行すると 実行時エラー '2501': OpenForm アクションの実行はキャンセルされました。 と出て、デバッグを押すと、 DoCmd.OpenForm "フォーム2", acNormal, WhereCond の行が黄色になります。

  • アクセスのマクロ

    友人がアクセスで作ったマクロです。3行目で止まってしまいます。どこが悪いのでしょうか。(私は全くの素人でわかりません) Private Sub 記載事項入力ボタン_Click() DoCmd.Close acForm, "初期画面", acSaveYes DoCmd.OpenForm "入力フォーム", acNormal ←ここ End Sub

  • accessの検索で・・・

    お世話になっております。 今、OfficeXPで、Accessを使ってデータベースを作っています。 そこで、フィルタについて教えていただけないでしょうか(TへT) まずは、こんな感じでVBAを書いてみたのですが・・・ Private Sub kensaku_Click() Dim rsql1 As String Dim rsql2 As String Dim keys As String keys = InputBox("キーワードを入力してください", "キーワード検索") If keys = "" Then Exit Sub End If rsql1 = "select tel from master where dairi_code = keys" rsql2 = "select tel2 from master where contact_tel = keys" If rsql1 <> "" Then Me.Filter = "tel = '" & keys & "'" Me.FilterOn = True DoCmd.OpenForm "form_tel", acNormal, , "[tel] = '#" & key & "#'", acFormEdit, acDialog ElseIf rsql2 <> "" Then Me.Filter = "tel2 = '" & keys & "'" Me.FilterOn = True DoCmd.OpenForm "form_tel2", acNormal, , "[tel2] = '#" & key & "#'", acFormEdit, acDialog Else: MsgBox "該当するデータはありません", vbOKOnly End If End Sub と、いう感じです。 したいことは、2つのそれぞれのテーブルに検索をかけ、一致したのがあったらそれに対応するフォームを開くと言う感じにしたいです。 ロジック的に穴がありすぎると思いますが、どうかよろしくお願いいたします。

  • Accessでコマンドから空のフォームを開くには?(初心者です)

    Access2003を使用して顧客名簿を作成しています。 コマンドボタン「新規入力」を押すと空のフォームが 開くようにしたいのですが、どのようにしたら良いのでしょうか? 一応、初心者なりに Private Sub コマンド4_Click() Dim namae namae = "個人住所フォーム" DoCmd.OpenForm namae, acNormal End Sub まではやったのですが、開いたフォームは名簿の一番最初の方の データでした・・・。