ExcelからAccessのフォームを開くVBA

このQ&Aのポイント
  • ExcelからAccessのフォームを開くVBAについて解説します
  • VBAをあまり理解できない初心者でも、ExcelからAccessのフォームを開く方法を学ぶことができます
  • Excelのセルに入力されている管理番号をパラメーターに自動で入力することは可能です
回答を見る
  • ベストアンサー

ExcelからAccessのフォームを開くVBA

VBAをあまり理解出来ていない初心者です。 ExcelからAccessのフォームを開く為に解説サイトを参考にしました。 Accessはテーブルだけのバックエンドと、それ以外のフロントエンドに分かれています。 Sub OPEN顧客管理番号検索() Dim objACCESS As Object Set objACCESS = CreateObject("Access.Application") objACCESS.OpenCurrentDatabase ActiveWorkbook.Path & "C:\....\FE.mdb" objACCESS.DoCmd.OpenForm "F_顧客管理番号検索", acNormal objACCESS.Visible = True objACCESS.UserControl = True Set objACCESS = Nothing End Sub Excelマクロ有効テンプレートからですと動作するのですが、マクロ有効ブックで保存すると以下のエラーが表示され動きません。 実行時エラー’7866’ このデータベースを開くことができません。データベースファイルが存在しないか、他のユーザーが排他モードで開いているか、ADPファイルではないことが原因です。 Accessを終了して試したり、Excelファイルの保存場所を変更してみたりしたのですが解決出来ません。 また、今回開いているフォームとは管理番号による検索クエリを元にしたフォームなのですがExcelのセルに入力されている管理番号をパラメーターに自動で入力することはできるのでしょうか? ご指導よろしくお願いします。 通報する

  • emknk
  • お礼率100% (1/1)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.1

> objACCESS.OpenCurrentDatabase ActiveWorkbook.Path & "C:\....\FE.mdb" パッと見た感じ上記のパス指定が開いているエクセルのパスの後ろにアクセスファイルのパスをCドライブからの指定で追加してますが・・・ たとえば、エクセルがCドライブにあるとしたら C:\エクセルのパス\C:\....\FE.mdb こんな指定になってるような・・・ ActiveWorkbook.Path &がいらないような気もします。

emknk
質問者

お礼

ご指摘いただいた部分を削除すると正常に動作するようになりました。 非常に助かりました。 ありがとうございました。

関連するQ&A

  • ExcelからAccessの関数を使用したい

    EXCELのVBAよりACCESS上のモジュールで定義された関数(Function) を使用したいのですが、可能でしょうか? EXCELから引数はACCESSに対しては、引数を付けて実行できるのですが、ACCESSからEXCELへの返却値の受け取り方が分からなくて困っています。(環境はOFFICE2000です。他のバージョンなら可能?) ■EXCEL Set objACCESS = CreateObject("Access.Application") objACCESS.OpenCurrentDatabase ActiveWorkbook.Path & "\database.mdb" objACCESS.Run "UserFunction", 123 Set objACCESS = Nothing #### UserFunctionの結果が欲しい ### ■ACCESS Public Function UserFunction(inValue) W_SQL = "SELECT data FROM table WHERE key = " & inValue Set DB = CurrentDb Set RST = DB.OpenRecordset(W_SQL) If RST.EOF Then RST.Close UserFunction = -1 Else UserFunction = RST("data") RST.Close End If End Sub

  • アクセスからアクセスを立ち上げたいのですが

    オフィス2007です。 アクセスからアクセスを立ち上げたいのですが、うまくいきません。 test1.accdbにフォームとコマンドボタンを設置して、 Private Sub コマンド1_Click() Dim acApp As Object Set acApp = CreateObject("Access.Application") acApp.OpenCurrentDatabase C:\test2.accdb" acApp.Visible = True End Sub を実行したのですが、アクセスのアプリケーションが一瞬だけ開いて、閉じてしまいます。 「 acApp.Visible = True」の部分に、ブレークポイントを設定して、ステップインしてみたところ、 acApp.Visible = Trueでアクセスのアプリケーションが立ち上がり、test2.accdbが表示されますが 「End Sub」で閉じてしまいます。 ずっと開き続けるにはどうすればいいでしょうか?

  • Excel から Accessクエリーを実行したい

    下記のようなマクロを組んでMS Accessのクエリー結果をExcelに出力したいのですが「レコードがない」というエラーになります。正しいコーディングを教えてください。 Sub DataFromAccess() Dim AccessApp As Object Set AccessApp = CreateObject("Access.Application") myDBName = "C:\MyAccess.mdb" '出力先フルパス xlsName = "C:\Invoice.xls" With AccessApp .Visible = True .OpenCurrentDatabase myDBName, acViewNormal .DoCmd.OutputTo acOutputQuery, "クエリー名", acFormatXLS, xlsName, True .CloseCurrentDatabase .Quit End With Set AccessApp = Nothing End Sub

  • もし該当のアクセスファイルが開いているのなら開かな

    エクセルからアクセスを開く方法を教えてください。 そして、 「もし該当のアクセスファイルが開いているのなら開かない」 と言う条件も付け加えたいです。 Sub test1() Dim strAcName As String Dim accApp As Object strAcName = "D:\ アクセスファイル名.mdb " 「GetObject」「CreateObject」どちらにしても結果は同じ? Set accApp = GetObject(strAcName) Set accApp = CreateObject(strAcName) 既にAccessファイルを開いている場合は、Visible = Trueにしたらエラーになる。 If Not accApp Is Nothing Then accApp.Visible = True accApp.OpenCurrentDatabase (strAcName) End If Set accApp = Nothing End Sub だと、 OpenCurrentDatabase の部分で、実行時エラー7867 既にこのデータベースは開いています。 になります。 だからってこの部分をコメントアウトすると 前回と同じように Set accApp = Nothingを通り越すと 折角開いたアクセスファイルが閉じてしまいます。 エクセルからアクセスを開く時にもハイパーリンクで Sub test2() Dim strAcName As String strAcName = "D:\ アクセスファイル名.mdb " ThisWorkbook.FollowHyperlink strAcName End Sub で開けたのですが、 「もし該当のアクセスファイルが開いているのなら開かない」 が出来ないので、 「GetObject」か「CreateObject」を 使って開くのかな?と思っています。

  • エクセルから現在起動しているアクセスファイルをアクティブにしたい

    現在エクセルとアクセスを開いています。 エクセルマクロで現在開いているアクセスをアクティブにしたいのですがうまくいきません。 Sub アクセスをアクティブにする() Dim app As Object Set app = CreateObject("Access.Application") app.Application.Visible = True app.Visible = True End Sub これを実行すると新たに空のアクセスアプリケーションが開きます。 (app.Application.Visible = True)を抜いても同じです。 現在起動中のアクセスファイル(○○○.mdb)をエクセルからアクティブにするにはどうすればいいのでしょうか? ご教授よろしくお願いします。

  • ACCESS VBA テーブルデータをEXCELに

    こんにちは、表題のような内容で行き詰ってしまい質問させてもらいます。 現在、商品在庫のデータベースをACCESS2010を使用してなんとか完成させました。 といっても売上管理等しているわけではなく、単に商品のデータベースです。 【テーブル構成】 T_商品 T_ブランド T_ジャンル T_商品を基本にし、T_ブランド、T_ジャンルはルックアップ用です。 T_商品をデータソースとして、入力、検索用に「F_商品」 というフォームを作ってあります。 入力、検索作業ともに問題なく行えており、現在レコード数は400程度ですが今後5000程度までは増えると思います。 表題のようにEXCELを併用するのは、今回WEBショップをはじめ、利用しているECシステムではCSVで掲載商品データをインポートできるので、それを利用しようと思っております。 理想の動作的には、 上記「商品フォーム」でショップに掲載したい(CSVファイルに転記したい)商品を検索し、 「ショップ掲載リスト」などのボタンを作って押すことで「掲載用.xls」などのエクセルファイルにテーブルのフィールドから必要な「商品名」「ブランド」「価格」などを抜粋して転記、 ショップに掲載したい商品、複数をすべて転記したらエクセルファイルをCSVファイルとして保存し、ECシステムにアップロードです。 現在フォームにエクセルファイルに転記用のボタンを作り、VBAで指定のエクセルファイルを起動するところまででき、コードはネットで探して、以下のようになっております。 Private Sub 転記ボタン_Click() Dim objExcel Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True objExcel.Workbooks.Open "エクセルファイルのパス.xlsx" End sub エクセルファイルはテーブルの定義がしてあり名前を「商品テーブル」としてあります。 ACCESS側のVBAでエクセルシート上の商品テーブル内の上から順に転記していくにはどういうACCESS VBAを書けばいいのでしょうか? 上からというのは新しく転記する商品を次の行、次の行にということです。 http://okwave.jp/qa/q356182.html こちらの質問も参考にしてみましたが、「.Cells(i, 1) = RS.Fields("フィールド1")」のところでエラーになりました。。。 長々と的を得てない質問文になってしまいましたが、よろしくお願いいたします。

  • セルの文字をマクロの一文に反映させる方法

    マクロ初心者になりますが、よろしくお願いします。 今、一つのエクセルで、顧客を管理していて、別のシートで 各顧客のカルテを作成しているのですが、 顧客管理しているエクセルで、検索をして、カルテ番号を出せるようにしてます。 同じシートでカルテ番号を入力すると、別のエクセル(カルテ) が開くようにしたいのですが、どのようにすればよいでしょうか? 私なりにマクロボタンを設定して開くまではきているのですが、 セルの文字を反映してできるようにしたいです。 利用しているマクロ Sub Auto_Open Workbooks.Open ThisWorkbook.Path & "\ファイル名.xlsx" End Sub このマクロのファイル名を Sub Auto_Open Workbooks.Open ThisWorkbook.Path & "\●●●.xlsx" End Sub ●●●のところをセルで記入した文字に変えることはできませんか? そうすると、カルテ番号を記入後、開くようにしたいです。 入力は、半角の数字で入力予定です。 利用しているソフトはオフィス2007です。

  • アクセスVBAのエラーについて

    フォームを閉じるためにフォームにボタンを置いて、イベントプロシージャに下記のように書き込みました。すると添付画像のエラーが返ってきてマクロが動きません。 Private Sub コマンド103_Click() On Error GoTo Err_コマンド103_Click DoCmd.Close Exit_コマンド103_Click: Exit Sub Err_コマンド103_Click: MsgBox Err.Description Resume Exit_コマンド103_Click End Sub で、「ファイル-オプション-現在のデータベース」の”フォームの表示”を問題のフォームに切り替えたら問題なく動作します。 つまり”フォームの表示”で選んだフォームでしかコマンドボタンのマクロが動きません。全てのフォームでマクロが動くにはどうしたらよいのでしょうか?

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

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

  • Accessでの検索フォーム作成

    お世話になります。 Accessを使い始めて半月ぐらいの初心者です 次のような条件の検索フォームの作成を依頼されたのですがうまく出来ません。 (1)Accessのフォームフィルタを使用した検索フォームで、3つのテキストボックス(以下TB)を同一 フォーム上に用意し、抽出を実行するボタンと解除するボタンをTBの隣にそれぞれ用意する (2)あいまいな条件(部分一致)で検索出来るようにする (3)抽出結果も同一フォーム上に表示 (4)任意のTBに入力した値で抽出後、他のTBを利用し 絞り込み検索を実行できるようにしたい 現在は下記のように作成しました。 ●テーブル [管理番号]、[品名品番]、[仕入先名]のフィールドを持つテーブルを用意。 ●フォーム(表形式) 上記テーブルに連結した検索フォームを作成し、抽出する値を入力する TBの名前はそれぞれ下のように付けました。 フィールド名    TB名 ・[管理番号]⇒管理番号検索 ・[品名品番]⇒品名品番検索 ・[仕入先名]⇒仕入先名検索 ・[抽出実行ボタン]のイベント(管理番号で検索時) Private Sub コマンド47_Click() Me.Filter = "管理番号 Like '*" & Me!管理番号検索 & "*'" Me.FilterOn = True End Sub ・[抽出解除ボタン]のイベント(管理番号で検索時) Private Sub コマンド49_Click() Me!管理番号検索 = Null Me.FilterOn = False End Sub 他2つも同様に作成して実行した結果、単体での抽出はうまくいくのですが さらに絞り込もうと他のTBに値を入力して抽出を実行すると先の抽出が解除され 単体でのフィルタがかかって抽出されてしまいます。 どなた様か良い案が御座いましたらご指導ください。 初心者のため、説明不足な点があるかと思いますが 不明な点がございましたらご質問くださいませ。 宜しくお願い致します。

専門家に質問してみよう