Excel VBAからMicrosoft Accessを開き、マクロを実行してExcelでさらにコードを実行しています。数日前にすべてうまくいきましたが、今は2つの問題があります。最初のアクセスはマクロを実行した後に終了しないので、Excelはタイムアウトします(Microsoft Excelがポップアップし、別のアプリケーションがOLEアクションを完了するのを待っているというメッセージボックスが表示されます)。それは実際には別の問題です。なぜなら、タイムアウトするとExcelと再びやり取りして、Excelのマクロを実行し続ける必要があるからです。 Excelでマクロを最初に起動した後は、何も触れる必要はありません。そして、私はまずExcelからのアクセスでマクロを実行していますが、実行後にアクセスが閉じない
...それは長い時間がかかるので、私はAccessで私のマクロに複数のステップを追加しましたので、それはまた、タイムアウトするかもしれないと思う、ここにアクセスを呼び出すExcelのコードは次のとおりです。
Sub Opendatabase()
Dim accessApp
Set accessApp = CreateObject("Access.Application")
accessApp.Visible = True
accessApp.OpenCurrentDataBase ("I:\MyPath\MyFile.accdb")
accessApp.Run "ImportDataRunQueriesExportData"
'Run the next part of Excel macro
Application.Run "PullinTheExportedAccessData"
End Sub
そして、アクセスでは、これは(それは非常に長い)申し訳ありません。それはデータを引き出し、クエリを実行する目的(私はそれらを開いたり閉じたりすることにより、より速い方法があるかどうかわかりません)、そしてデータをエクスポートします。私は最後にそれを閉じたいと思うし、今はその部分がうまくいきません。
Sub ImportDataRunQueriesExportData()
DoCmd.RunSavedImportExport "Import-ERT Aggregate Macro"
'Open master book January to refresh
DoCmd.SetWarnings False
DoCmd.OpenQuery ("Remove HP not Area8")
DoCmd.OpenQuery ("Remove Non Area 8 HP")
DoCmd.SetWarnings True
DoCmd.OpenTable ("Remove HPnonArea8")
DoCmd.Close acTable, "Remove HPnonArea8"
DoCmd.OpenQuery ("Summary For January")
'Open Duplicate search queries across all c
DoCmd.OpenQuery ("S+D")
DoCmd.OpenQuery ("S+D+L")
DoCmd.OpenQuery ("S+D+L+F")
DoCmd.OpenQuery ("S+D+L+F+M")
'Open Duplicate search queries within c
DoCmd.OpenQuery ("C+S+D")
DoCmd.OpenQuery ("C+S+D+L")
DoCmd.OpenQuery ("C+S+D+L+F")
DoCmd.OpenQuery ("C+S+D+L+F+M")
'Save and close queries, made with create Macro function
DoCmd.Close acQuery, "Summary For January"
DoCmd.Close acQuery, "S+D"
DoCmd.Close acQuery, "S+D+L"
DoCmd.Close acQuery, "S+D+L+F"
DoCmd.Close acQuery, "S+D+L+F+M"
DoCmd.Close acQuery, "C+S+D"
DoCmd.Close acQuery, "C+S+D+L"
DoCmd.Close acQuery, "C+S+D+L+F"
DoCmd.Close acQuery, "C+S+D+L+F+M"
'Open Summary Queries
DoCmd.OpenQuery ("New January")
DoCmd.OpenQuery ("Renew January")
DoCmd.OpenQuery ("Count October")
DoCmd.OpenQuery ("Count November")
DoCmd.OpenQuery ("Count December")
DoCmd.OpenQuery ("5B")
DoCmd.OpenQuery ("5CW")
DoCmd.OpenQuery ("5ML")
DoCmd.OpenQuery ("5M")
DoCmd.OpenQuery ("5S")
DoCmd.OpenQuery ("RA")
'Save and close queries and table
DoCmd.Close acQuery, "New January"
DoCmd.Close acQuery, "Renew January"
DoCmd.Close acQuery, "Count October"
DoCmd.Close acQuery, "Count November"
DoCmd.Close acQuery, "Count December"
DoCmd.Close acQuery, "5B"
DoCmd.Close acQuery, "5CW"
DoCmd.Close acQuery, "5ML"
DoCmd.Close acQuery, "5M"
DoCmd.Close acQuery, "5S"
DoCmd.Close acQuery, "RA"
'Make Table, delete w/in c dups, Open Data Table S D Between C, close table
DoCmd.SetWarnings False
DoCmd.OpenQuery ("Table S+D")
DoCmd.OpenQuery ("Delete C+S+D")
DoCmd.SetWarnings True
DoCmd.OpenTable ("S D Between C")
DoCmd.Close acTable, "S D B C"
'Run saved exports of the queries to folder
DoCmd.RunSavedImportExport "Export-S+D"
DoCmd.RunSavedImportExport "Export-S+D+L"
DoCmd.RunSavedImportExport "Export-S+D+L+F"
DoCmd.RunSavedImportExport "Export-S+D+L+F+M"
DoCmd.RunSavedImportExport "Export-C+S+D"
DoCmd.RunSavedImportExport "Export-C+S+D+L"
DoCmd.RunSavedImportExport "Export-C+S+D+L+F"
DoCmd.RunSavedImportExport "Export-C+S+D+L+F+M"
DoCmd.RunSavedImportExport "Export-New January"
DoCmd.RunSavedImportExport "Export-Renew January"
DoCmd.RunSavedImportExport "Export-Count October"
DoCmd.RunSavedImportExport "Export-Count November"
DoCmd.RunSavedImportExport "Export-Count December"
DoCmd.RunSavedImportExport "Export-5B"
DoCmd.RunSavedImportExport "Export-5CW"
DoCmd.RunSavedImportExport "Export-5ML"
DoCmd.RunSavedImportExport "Export-5M"
DoCmd.RunSavedImportExport "Export-5S"
DoCmd.RunSavedImportExport "Export-S D Between C"
DoCmd.RunSavedImportExport "Export-RA"
Dim n As Integer
Dim db As DAO.Database
Set db = CurrentDb
For n = db.TableDefs.Count - 1 To 0 Step -1
' loop through all tables
If InStr(1, db.TableDefs(n).Name, "ImportError") > 0 Then
' if table is import errors table
DoCmd.DeleteObject acTable, db.TableDefs(n).Name
' delete table
End If
Next n
Application.SetOption "Auto compact", True
End Sub
ご協力いただければ幸いです。ありがとうございました。 DoCmd-法対象商品:
accessApp.DoCmd.OpenQuery ("5ML")
はこの少し詳しく説明するには:これはに
DoCmd.OpenQuery ("5ML")
変更:私はあなたの問題を見ることができるものから、
は 'それ^^' Application.Run' –
後accessApp.Application.Quit'を試してみてください。また、 'set accessApp = Nothing'する必要もあります。 –
各行で 'DoCmd'を呼び出すのではなく、' With DoCmd ... End With'を使うことで*いくらかの速度を得ることもできます。 –