• ベストアンサー

[Access VBA] DoCmd.OpenForm ...の書式について(VBAに詳しい方求む!)

ema_0222の回答

  • ema_0222
  • ベストアンサー率34% (63/185)
回答No.2

おそらく、ダブルクオーテーションはVBAの中での「文字」を意味するからですね。 フォームの名称は文字ではないんでが、テーブルに格納するときデータ型がテキスト型だと「文字」を格納します。その際VBAで更新や追加を行うときは、格納する文字をダブルクオーテーション(シングルクオーテーションの場合もあります)で括ります。そうしないとデータ型が合いませんというエラーが起きるはずです。 ヘルプでも「DoCmd.OpenForm [  ],[  ],」といった感じのことが書いていませんでした?[]←これはフィールド名なんかを表します。 ただ、テーブル名などが関数の中に出てくるときは、これは””で括ったりします。 例えば、Dlookup("[フィールド名1]","[テーブル名]","[フィールド名2]=" & 1) これはテーブル名のフィールド名1をフィールド名2が1のものを参照しなさいという意味ですが、このように””を使ったり使わなかったり、また文字と文字以外を一つの文にするときは&や+を使って結合してやる必要があります。 散漫な文章になってしまい申し訳ありません。 VBAはデータ型に厳しいのでがんばって勉強してください。 追加です。日付型のデータは##で括ります。

momoo
質問者

補足

回答ありがとうございます。 出てきたのはおっしゃる通り、「データ型が合いません」というエラーメッセージでした。 Quote)フォームの名称は文字ではないんでが、テーブルに格納するときデータ型がテキスト型だと「文字」を格納します。その際VBAで更新や追加を行うときは、格納する文字をダブルクオーテーションで括ります。そうしないと(Unquote ここの説明がいまいちよくわからないのですが。 もしよければもうすこし詳しく説明をお願いします。 面倒くさければ結構です。

関連するQ&A

  • MS ACCESS2000のVBAでDocmd.openformしてます

    openform のパラメータのwhereconditionに、like演算子を使って、 「 フィールド名 like %文字% 」 というような指定をしたいのですが、上手くいきません。 演算子が無いとか、いろいろ言われてしまいます。 どのように記述すると、動作するでしょうか?

  • 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 [部署]はこれまで数値で表していましたが、テキストを使用することになりました。 上記のプロシージャを実行すると[部署] のところにパラメータが表示されて 入力すると指定の支所と部署のデータが表示されます。 別の質問で、テキスト型を検索する記述方法は教えていただいて解決したのですが、 パラメータを表示せずに上記の式に反映するにはどうしたらいいのでしょうか。 型は数値型からテキスト型に変更しています。 お力添えをお願いいたします。

  • 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アクションの実行はキャンセルされました」 と表示されてしまいます。 どのようにしたら、この現象が回避でき希望する動きができるのかわからず悩んでおります。 すみませんが、解決する方法を教えていただければと思います。 宜しくお願いいたします。

  • 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 ・ ・ 上記のような記述で上手くいかないので、部分一致で検索 出来る方法を教えていただけませんでしょうか。 よろしくお願い致します。

  • OpenFormがACCESS2000でエラー

    メニューのフォームで使っているOpenFormがACCESS2000で次のエラーがでます。OFFICE365では出ません。 「selectステートメントが間違っている予約語や引数を含んでいるか、区切り記号が正しくありません」 例えば次のコードです。 Private Sub 受注入力_Click() DoCmd.OpenForm "受注入力" End Sub 同じようなコードでも次のコードではなぜか出ていません。 Private Sub 受注入力B_Click() DoCmd.OpenForm "受注入力B" End Sub このフォームは何年も変更しておらずエラーは出なかったのですが、1か月前あたりから出るようになりました。 なぜかお分かりの方がおられましたらご教示願えませんでしょうか。

  • アクセスVBA 変数を渡したい

    フォーム1のcmd_ボタンをクリックして、フォーム2を開く際に、変数を渡したいのですが、どう渡せばいいのでしょうか? Private Sub cmd_ボタン_Click() myStr = "あああ" DoCmd.OpenForm "フォーム2" (myStr) End Sub とすると、エラーになります。 文の書き方を教えてください。

  • Excel2003 VBA ボタンを押したらフォームを開く

    オブジェクト名”きほん”というフォームをつくって、表示させるためのボタンを”検索”というシートに作りました。 なぜかエラーが出ます。 msgbox的なイメージで考えていたのですが、前提の定義がいるっぽいエラーメッセージが入ってます。 どうしたらいいと思いますか? (”検索”内のボタンは、ボタン441という名称です。) Sub ボタン441_Click() Docmd.OpenForm ("きほん") End Sub

  • 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には、対応するテキストボックスは用意してあります。

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

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