• ベストアンサー

ACCESSからExcelのVBAを動かしたい。

ACCESSからExcelのVBAを動かしたいのですが・・・。 何か、いい方法はありますか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3>特別問題ないと思います。 End Ifが対応してないのは、多分誤記で Set exl = Nothingする前に 開いたファイルは、閉じるべきで あと、それより重要なのが exl.Quitしてやらないとエクセルが立ち上がったままになる というのはありますが。 アクティブワークブックとか、 そういうのは、 多分、formVBAでみんなやってるんでしょうから

kaekaekaede
質問者

お礼

度々有難うございます。 exl.Quitも入れておかないとまずいですね。 また、何かありましたら、ご指導宜しくお願いします。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

エクセルでエクスポートしてもそのVBAの部分ができるわけではないので、 何かと面倒な気がします。 むしろ、エクセルからアクセスの加工データを取り込んではどうでしょう? そうすれば、あらかじめエクセルVBAを書いておけますし。 私、ちょっと勘違いしてますか? そういう決まったエクセルが既にあって、 そこから取り込みなどをするプロシジャーがあって 単にそのプロシジャーを実行したいだけなのでしょうか?

kaekaekaede
質問者

補足

返信有難うございます。補足させていただきます。 ACCESSのクエリーを名前を指定し、エクスポートする(Excel形式で)。あらかじめ、VBAを書いたExcelファイルを用意しておき、エクスポートデータを基に、アウトプットを作成する。のような感じにしたいのです。 ・フォームで作成ボタンを用意し、クリックした時、処理をさせる。 ・ACCESSのマクロ(クエリーエクスポート)を用意しておき、エクスポートさせる。 ・VBAを書いたExcelファイル(フォーム.XLS)を開き、formVBAを実行させる。 一応、自分なりに考えてみたんですけど。エラーもなく、動くんですけど、これで大丈夫なのでしょうか? Private Sub コマンド1_Click() Dim exl As Object DoCmd.RunMacro "クエリーエクスポート" Set exl = CreateObject("Excel.application") Set bk = exl.workbooks.Open("C:\フォーム.xls") exl.Visible = True exl.Run "formVBA" Set exl = Nothing End If End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>いい方法はありますか? 良い方法(特別に知恵が要る方法、裏技などが必要な方法)なんて要る問題では無いと思います。解説書やWEBに当たれば、良く解説してある処理です。私も寄せ集めで下記を作って見ました。参考になれば。 実行するとアクセスのテーブルをエクセルから(処理を入れてないので、そのまま)印刷します。 PrintOutの前にエクセルVBAの処理を、エクセルVBAのつもりで書いて、VBAコードを入れてください。 ただオブジェクトを頭につけ無いとなりません。 Sub test01() Dim strFilePath As String 'エクスポート先ファイル名を設定 strFilePath = "C:\My Documents\箇所1.txt" x = Dir(strFilePath) If x <> "" Then Kill strFilePath End If 'エクスポートを実行 DoCmd.TransferText acExportDelim, , "箇所1", strFilePath, True Set xlapp = CreateObject("Excel.Application") xlapp.Visible = True Workbooks.OpenText Filename:=strFilePath, StartRow:=1, _ DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _ :=False, Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _ Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), _ Array(5, 1)) ActiveWindow.SelectedSheets.PrintOut Copies:=1 'Set xlbk = xlapp.workbooks("Book1") Set xlbk = xlapp.activeworkbook 'Set xlsh = xlbk.Sheets("sheet1") Set xlsh = xlbk.activesheet Set xlapp = Nothing Set xlbk = Nothing Set xlsh = Nothing End Sub アクセスのモジュールに貼りつけます。 VBE画面のツール-参照設定-MicrosoftExcel9.0ObjectLibraryなどをチェックを入れる必要があるようです。 C:\My Documents\箇所1.txtのフォルダ名を適当に変えること。 「箇所1」はアクセスのテーブル名と同じにしてます。 別の行のテーブル名の「箇所1」も自分に合わせて変えること。 小数例でテスト済み。

kaekaekaede
質問者

お礼

有難うございました。 自分でも、調べてみて解決する事ができました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

確か、今までの質問の中に有ったような気がします。 どんな処理をするのでしょうか?

kaekaekaede
質問者

補足

ACCESSで加工したデータを基に、ExcelのVBAを実行したいのです。今は、ACCESS加工データをエクスポートし、Excelを開き、ExcelのVBAを実行しております(アウトプットのフォームをExcelで作成しているため)。 その過程が、面倒なので、エクスポート&Excel VBA実行をACCESS側から行いたいと考えています。 説明が下手ですみません。

関連するQ&A