- ベストアンサー
AccessからExcelVBAのモジュールを呼び出したい
AccessからExcelVBAのモジュールをキックし、実行する方法はあるでしょうか。 プロシージャを指定して実行さえできれば良いのですが・・・ 呼び出し元はAccessのマクロ・AccessVBAどちらでも構いません。 どちらでもできるのであれば、両方のやり方を教えていただけるとありがたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VBAです。下記を参考にして下さい。 ============================================================ DoCmd.SetWarnings False Set App = CreateObject("Excel.Application") App.Workbooks.Open "C:\テスト用.xls" Set Book = App.Workbooks(1) Set Sheet = App.ActiveSheet Book.Application.Visible = True App.Run "Macro1" App.DisplayAlerts = False Book.SaveAs Filename:= _ "C:\テスト用変更後.xls", FileFormat:=xlNormal _ , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False DoCmd.SetWarnings True Set Sheet = Nothing Set Book = Nothing MsgBox "作成完了" ============================================================
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 Access VBA OLE接続です。Access マクロでは、Excel側に自動起動マクロを作らなくてはならないです。 これは、Excelが既に立ち上がっている場合は、それを利用しますが、立ち上がっていなければ、目的のブックをオープンします。ただし、これは、VBAのみです。 '標準モジュールのほうがよい Sub Acc2ExcelMacro() Dim xlApp As Object Dim xlBook As Object Dim myPath As String Dim OpenFlg As Boolean '*****ユーザー設定***** 'ブック名 Const MYBOOK As String = "Excel_B.xls" 'マクロ名 'Excelのマクロは、標準モジュールにあること Const MYMACRO As String = "FromAccess" 'Excelのブックは、mdbファイルと同じ場所の場合 myPath = CurrentProject.Path '*********************** On Error Resume Next Set xlApp = GetObject(, "EXCEL.Application") If Err.Number > 0 Then 'ブックが開いていないとき Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(myPath & "\" & MYBOOK) xlApp.Visible = True Else OpenFlg = True End If On Error GoTo 0 On Error GoTo ErrHandler If xlApp.ActiveWorkbook.Name <> MYBOOK Then '違うブックが開いていたとき OpenFlg = True Set xlBook = xlApp.Workbooks.Open(myPath & "\" & MYBOOK) xlApp.Visible = True Else Set xlBook = xlApp.ActiveWorkbook End If xlApp.UserControl = OpenFlg xlApp.Run "'" & MYBOOK & "'!" & MYMACRO '引数が必要なら、, をつけて続ける If OpenFlg = False Then '違うブックを開いていたときは、Applicationを終了しない。 'この設定では、自動保存はしない。必要な場合は、マクロ側にさせる。 xlBook.Close False xlApp.Quit End If Set xlBook = Nothing ErrHandler: If Err.Number > 0 Then MsgBox Err.Number & ":" & Err.Description End If Set xlApp = Nothing End Sub