VBAのopenformについて

このQ&Aのポイント
  • VBAを使用してAccessのフォームから別のフォームを開く方法について解説します
  • Accessのフォームを使って顧客管理データベースを作成しているときに、一覧のフォームから顧客コードを元に別のフォームを開きたい場合、VBAのopenformメソッドを使用することができます
  • しかし、フォーム1のテキストボックスに記述したVBAコードがうまく動作せず、「OpenFormアクションの実行はキャンセルされました」というエラーが表示されることがあります。このエラーが発生する原因と解決方法について解説します
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

テーブルの顧客コードが数値型ならば、 DoCmd.OpenForm "顧客登録画面", , , "[顧客コード] =" & Me![顧客コード] & "" とします。質問の場合はテーブルの顧客コードが数値型なのに、 " & Me![顧客コード] & " を '" & Me![顧客コード] & "' のように「'」で囲ったからです。顧客コードがテキスト型ならば 質問の場合とおなじにします。

happyrabbit
質問者

お礼

教えていただいた通り記述を直したところ、うまく動きました。 おっしゃる通り、データ型が数値型でした。 ありがとうございました。

関連するQ&A

  • 「DoCmd.OpenForm」が実行できない(vbaでフォームを開きたい)

    「フォーム1を開く」vbaで行ないたいのですが エラーになってしまいます。 Sub test1() DoCmd.OpenForm , acNormal, フォーム1 End Sub は「変数が定義されていません」と表示され (「変数の宣言を強制する」にチェックを入れています) Sub test2() DoCmd.OpenForm , acNormal, "フォーム1" End Sub は「引数は省略できません」となります。 Sub test1() DoCmd.OpenForm , フォーム1, acNormal End Sub Sub test2() DoCmd.OpenForm , "フォーム1", acNormal End Sub これにしても同じでした。 「OpenForm」をヘルプで調べてみたところ 「expression 」と「FormName」が「 必ず指定します。」でした。 「expression 」がないからだめなのでしょうか? すいません、助けてください。 よろしくお願いします。

  • VisibleとOpenFormは意味が同じ?

    データベースにフォームが1つあります。 標準モジュールに Sub Visible() Form_フォーム1.Visible = True End Sub Sub OpenForm() DoCmd.OpenForm "フォーム1" End Sub を作り、どちらも実行させても同じ動きをします。(フォームが開きます) この二つは同じ動きをすると思っていいのでしょうか?

  • エラーが出ます

    Stressmanと言います。 ACCESS2002を使っています。 今、「報告書」というフォームから「顧客」というフォームを開きます。 「顧客」フォームにはサブフォームとして「顧客一覧」のデータシート が組み込まれています。 「顧客一覧」の該当する行をダブルクリックしたら、フォームを閉じて、 「報告書」フォームの「顧客ID」にダブルクリックした顧客の「顧客ID」 がコピーされる。っていうのを実現させようとしています。 下記がそのコードです。 まず「報告書」フォームのコマンドボタンに下記のコードを設定 「顧客」フォームを開きます。 Private Sub コマンド110_Click() DoCmd.OpenForm "顧客", , , , acFormAdd, , Me.Name End Sub そして、「顧客」のサブフォームの「顧客一覧」(データシート)の ダブルクリックのイベントのところに下記のコードを設定 Private Sub Form_DblClick(Cancel As Integer) Dim strFormName As String strFormName = Me.OpenArgs ← エラー Forms(strFormName).[顧客ID] = Me.[Frm_04顧客マスタ_サブフォーム].Form.[顧客ID] DoCmd.Close acForm, Me.Name End Sub エラーがでるのがここです。 どうやら、Me.OpenArgsの値がNullらしいのですが、 どうやって回避すればいいのか、分かりません。 分かりにくい説明ですが、宜しくお願いします

  • OpenFormがACCESS2000でエラー

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

  • アクセス DoCmd.Minimize

    DoCmd.Minimizeで小さくしたフォームを元に戻したいのですが Sub 元に戻す() DoCmd.OpenForm "フォーム3" End Sub でいいのでしょうか? 一応上記のコードで元のサイズに戻りますが 元に戻したいのに、再度OpenForm する事に 抵抗というか疑問に思っています。 よろしくお願い致します。

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

  • アクセスVBAにて登録ボタン押下時の動作記述

    顧客登録フォームで登録ボタンの押下時、更新前処理にて「はい/いいえ」の選択をしています。 ×ボタンでも更新前処理が実行されるため処理の記述に困っています。 下記が希望動作です。 -----登録ボタン はい  → レコードを保存する  顧客登録フォームを閉じる 顧客照会フォームを開く    いいえ → レコードを保存しない 顧客登録フォームに留まる -----×ボタン はい  → レコードを保存する  顧客登録フォームを閉じる いいえ → レコードを保存しない 顧客登録フォームを閉じる -----現在のソース Private Sub Form_BeforeUpdate(Cancel As Integer)   Ret = MsgBox("登録しますか", vbYesNo)   Select Case Ret     Case vbNo     Me.Undo   End Select End Sub Private Sub 登録_Click()   DoCmd.RunCommand acCmdSaveRecord End Sub どのように記述したらよいのでしょうか。 以上宜しくお願いします。

  • access2000表形式フォームから単票形式フォームで開きなおす方法

    access2000でDBをつくっています 表形式フォームのNoフィールドをダブルクリックして、クリックしたレコードのみを 単票形式フォームで開く。ということをしたいのですが、 表形式フォームのほうに Private Sub   No_DblClick(Cancel As Integer) DoCmd.OpenForm "単票形式", acNormal, , [No] = Me![No].Value, , acDialog End Sub とVBAを書いているのですが、 Noの値が3のところをクリックしてもNo=1のレコードが先頭に開けてしまい、 望むような結果が得られません。 本3,4冊調べてもよくわからないので、 アドバイスお願いします。

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

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

専門家に質問してみよう