• ベストアンサー

ACCESS VBAのOpenForm書き方

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

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

こちら(Access2010)では、抽出条件・・・のエラーになりました。 先の回答者さんも指摘されていますが DoCmd.OpenForm "会員データ", , , "種別 = '" & Me![種別] & "' AND 会員番号 = '" & Me![会員番号] & "'" 種別、会員番号ともに『数値データ』です。 なので、シングルクォーテーションで括る必要は有りません。 DoCmd.OpenForm "会員データ", , , "種別 =" & Me![種別] & " AND 会員番号 =" & Me![会員番号] です。 これでエラーになるのなら、 DoCmd.OpenForm "会員データ" だけで試してみれば問題解決の糸口が掴めるかと。 なお、日付型の場合は、# で括ってください。

その他の回答 (1)

回答No.1

Option Compare Database Option Explicit Private Sub コマンド0_Click() On Error GoTo err_コマンド0_Click   DoCmd.OpenForm "画像一覧", , , "id=1"   DoCmd.OpenForm "画像一覧", , , "id='1'"   DoCmd.OpenForm "画像一覧", , , "id=''" exit_コマンド0_Click:   Exit Sub err_コマンド0_Click:   MsgBox Err.Description   Resume exit_コマンド0_Click: End Sub 3つの書き方の内、下の2つはエラーになります。 でも、エラーメッセージが違います。 "OpenFormアクションはキャンセルされました" もちろん、原因は<型の不一致>です。 '1'・・・文字列型 ''・・・・ヌル値 >抽出条件でデータ型が一致しません。 これは、クエリの実行時のエラーだと推察します。 ですから、<ACCESS VBAのOpenForm書き方>のみに問題がある訳ではないと思います。 でも、先に発生するエラーは、"OpenFormアクションはキャンセルされました"の筈。 だとするならば、DoCmd.OpenFormは正常に実行されていることになります。 つまり、問題が複層している可能性があります。 なお、Access2002の場合ですが・・・。

KEMMY2011
質問者

お礼

ありがとうございます。 >つまり、問題が複層している可能性があります。 再度、見直すと矛盾があるような気がしてきました・・・ もう一度見直します。 その時に疑問が沸いたら、整理したうえで質問いたします。 早速の回答ありがとうございました。

関連するQ&A

  • OpenForm

    AccessVBAで DoCmd.OpenForm "メインメニュー", acNormal, "", "", , acNormal という記述がありますが、式.OpenForm(FormName, View, FilterName, WhereCondition, DataMode, Window Mode, OpenArgs)で引数を合わせていくと個数があいません。最後のacNormalは、どれでしょうか?

  • ACCESS VBA コマンドDoCmd.OpenFormの引数

    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]の表記が良くないのだと思うのですが、具体的な表記方法が分かりません。 よろしくお願いします。

  • Access DoCmd.OpenFormの引数

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

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

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

  • Access2000 (VBA) ' & "などの記号の意味

    次のコードで迷ってます。 InputBoxに入力した、都道府県と同一ものだけをレポートに表示させるものです。(ちなみにこのコードは正しく動きます。) Private Sub コマンド2_Click() Dim myStr As String myStr = InputBox("抽出する都道府県は?") DoCmd.OpenForm FormName:="顧客マスタ表形式フォーム", _ WhereCondition:="[都道府県]='" & myStr & "'" End Sub この、 "[都道府県]='" & myStr & "'" が理解できません。 (一番外の”は、WhereConditionの条件を示すのは分かります。) ただ、'や&がなぜ必要で、このコード内ではどのような役割をしているのか分かりません。(’や&を消すとエラーになるので、この書き方が正解なのでしょうけど、理解できずに困っています。) そもそも、データ型が文字列でも、変数には&のような文字列連結演算子が必要なのか? なぜ、’が必要なのか?

  • アクセスのVBAについて

    win2000、アクセス2000を使用しています。 「検索条件」というフォームのテキストに条件を入力したら、「検索結果」というフォームへ抽出されるようにしたいのです。 条件を入力する際に一部分(キーワード)の入力でも当てはまるデータが抽出されるようにしたいのですが、検索条件を入力するテキストボックスが10ヶ所あり、それぞれにキーワードでの抽出をしたいのです。 DoCmd.OpenForm "検索結果", acNormal, , "[施工年度] Like '*" & t_04.Value & "*'" ※[施工年度] →フィールド名  t_04    →テキスト名 上の状態では、うまくいきましたが、条件が複数ある時はどうやって続けたらよいかわかりません。 単純に And で続けたらエラーがでてうまくいきません。 アクセス初心者のため、うまく説明できず申し訳ありませんが、どうぞよろしくお願いします。

  • DoCmd.OpenForm メソッド (Acce

    DoCmd.OpenForm メソッド (Access)について文法が分かりません。 何卒、お知恵を借りたく存じます。 よろしくお願いします。 やりたい事は従業員番号と期間を指定してフォームを開きたいのです。 おそらく文法が間違えているのではと思っております。 DoCmd.OpenForm "TargetSelection", acNormal, , "[従業員番号]='" & TList & "' AND [日付]= Between #' & Sday & #' And '# & Eday & #'"

  • accessでの2つのコンボックスによるフィルター

    フォームのオープン時に下記を記載しています。 Private Sub Form_Load() Me.ステータスリスト.RowSourceType = "Table/Query" Me.ステータスリスト.RowSource = "Select ステータスT.ステータス1 FROM ステータスT" Me.申請リスト.RowSourceType = "Table/Query" Me.申請リスト.RowSource = "Select 申請種別T.申請内容1 FROM 申請種別T" テーブルは3種類 申請履歴T(全データ) ステータスT(コンボックス用データ) 申請種別T(コンボックス用データ) Private Sub 検証_Click() DoCmd.ApplyFilter WhereCondition:="[ステータス]='" & Me.ステータスリスト & "'" 'DoCmd.ApplyFilter WhereCondition:="[申請内容]='" & Me.申請リスト & "'" End Sub 以上です。 1つを選択後2つ目を選択すると○○○and△△△って具合にならず、一方に引っ張られて ちゃんと出ません。 何卒、ご助言宜しくお願い致します。

  • アクセスVBA(先日の続きになります)

    前回教えていただきました検索抽出のVBAですが、抽出がうまくできなくなってしまいました。 抽出条件を入力しているにもかかわらず、全部のデータが表示されてしまいます。 どこがまずいのかわかりましたら、ぜひ教えてください。 Private Sub btn_検索02_Click() Dim kensaku As String If Not Me![t_04] = "" Then kensaku = kensaku & _ "([舗装施行年度] Like '*" & Me![t_04] & "*') AND " If Not Me![t_05] = "" Then kensaku = kensaku & _ "([舗装工事名] Like '*" & Me![t_05] & "*') AND " If Not Me![t_06] = "" Then kensaku = kensaku & _ "([舗装区間01] Like '*" & Me![t_06] & "*') AND " If Not Me![t_07] = "" Then kensaku = kensaku & _ "([舗装区間02] Like '*" & Me![t_07] & "*') AND " If Not Me![t_08] = "" Then kensaku = kensaku & _ "([改良施行年度] Like '*" & Me![t_08] & "*') AND " If Not Me![t_09] = "" Then kensaku = kensaku & _ "([改良工事名] Like '*" & Me![t_09] & "*') AND " If Not Me![t_10] = "" Then kensaku = kensaku & _ "([改良区間01] Like '*" & Me![t_10] & "*') AND " If Not Me![t_11] = "" Then kensaku = kensaku & _ "([改良区間02] Like '*" & Me![t_11] & "*') AND " If Not Me![t_12] = "" Then kensaku = kensaku & _ "([台帳作図年度] Like '*" & Me![t_12] & "*') AND " If Not Me![t_13] = "" Then kensaku = kensaku & _ "([台帳調査名] Like '*" & Me![t_13] & "*') AND " If kensaku <> "" Then kensaku = Left(kensaku, Len(kensaku) - 5) DoCmd.OpenForm "検索結果", , , kensakum, acFormReadOnly DoCmd.Maximize DoCmd.Close acForm, Me.Name End If End Sub

  • ACCESS VBA 一覧から別フォームを開きたい

    顧客管理をしようとしています。 表形式のフォームで一覧を表示させています。 一覧の詳細セクションに「詳細」というボタンをつけていて、 すべての行に、詳細ボタンを表示させています。 この詳細ボタンを押したら、この顧客カード(単票形式のフォーム)を開きたいと思っています。 現在、下記の記述をしていますが、 「抽出条件でデータ型が一致しません」とのエラーメッセージが出ます。 どこを修正したら良いかわかりません。 わかる方、よろしくお願いいたします。 現在の記述 Private Sub コマンド29_Click() If Me.NewRecord Then MsgBox "新規レコードから詳細情報を表示することはできません。" Else DoCmd.OpenForm "顧客フォーム", , , "顧客ID='" & 顧客ID & "'" End If End Sub

専門家に質問してみよう