3

Excel から Access データベースで一連のクエリを開始する次のコードがあります。これらのクエリを Access で単独で実行すると、正常に動作し、適切なファイルの生成に成功しますが、ボタン クリックを使用してマクロを Excel で実行するように変換すると、いくつかの問題が発生します。以下の私のコードを参照してください:

Sub AccessImport()

Dim acApp As Object
Dim MyDatabase As String
Dim question As String

question = MsgBox(Prompt:="Are you sure you want to complete this action?  Running this process is lengthy and could take a couple minutes to complete.", Buttons:=vbYesNo, Title:="Run SOD Matrix")

If question = vbYes Then

MyDatabase = "directory string"
OutputFile = "output string"

    'open the database and apend the combination table to existing
    Set acApp = CreateObject("Access.Application")
        acApp.OpenCurrentDatabase (MyDatabase)
        acApp.Visible = True
        acApp.UserControl = True
        acApp.DoCmd.SetWarnings False
        acApp.DoCmd.OpenQuery "QRYDELETE_PS_ROLE_NAMES", acViewNormal, acEdit
        acApp.DoCmd.OpenQuery "QRYDELETE_PS_ROLE_USER", acViewNormal, acEdit
        acApp.DoCmd.OpenQuery "QRYDELETE_SOD_TBL", acViewNormal, acEdit
        acApp.DoCmd.OpenQuery "QRYAPPEND_PS_ROLE_NAMES", acViewNormal, acEdit
        acApp.DoCmd.OpenQuery "QRYAPPEND_PS_ROLE_USER", acViewNormal, acEdit
        acApp.DoCmd.OpenQuery "QRYAPPEND_SOD_TBL", acViewNormal, acEdit
        'acApp.DoCmd.OpenQuery "QRY_HIGH", acViewNormal, acEdit
        acApp.DoCmd.OutputTo acOutputQuery, "QRY_HIGH", "ExcelWorkbook(*.xlsx)", OutputFile, _
            False, "", , acExportQualityPrint
        acApp.DoCmd.SetWarnings True
        acApp.CloseCurrentDatabase
        acApp.Quit
    Set acApp = Nothing

Else
MsgBox ("Process has been cancelled.")
    Exit Sub
End If
MsgBox ("Process has completed successfully.")
End Sub

出力をエクスポートして保存することを意図した最後のクエリでは、変換の問題を防ぐために の形式タイプをtoにProperty is not found. 変更しようとしたことを示すエラーが発生しましたが、それでも正常に完了することはできません。このコードをシート自体に保持するのではなく、モジュールに配置する必要がありますか? 考え/助けますか?DoCmdTransferSpreadsheetacFormalXLS

4

1 に答える 1

2

Siddharth 氏は、次の声明で問題を特定しました。

acApp.DoCmd.OutputTo acOutputQuery, "QRY_HIGH", "ExcelWorkbook(*.xlsx)", OutputFile, _
    False, "", , acExportQualityPrint

acOutputQueryAccess オブジェクト ライブラリへの参照がなければ、Excel は Access の定数とについて何も認識しませんacExportQualityPrint

モジュールの Declarations セクションに追加Option Explictし、VB Editor のメイン メニューから Debug->Compile を実行するのが賢明です。そうすると、このような行で同様の問題が発生するのではないかと思います...

acApp.DoCmd.OpenQuery "QRYDELETE_PS_ROLE_NAMES", acViewNormal, acEdit

acViewNormalExcel は、Access の定数とについても何も認識しませんacEdit。ただし、意図が「アクション」クエリ ( INSERTUPDATEDELETEなど) を実行することであった場合、それらの定数が認識されないことは良いことです。そうしないと、これらのクエリを実行する代わりに、デザイン ビューで開くことになります。

別のアプローチを検討してください...

Const dbFailOnError As Long = 128
'acApp.DoCmd.SetWarnings False ' leave SetWarnings on!
acApp.CurrentDb.Execute "QRYDELETE_PS_ROLE_NAMES", dbFailOnError
acApp.CurrentDb.Execute "QRYDELETE_PS_ROLE_USER", dbFailOnError
于 2013-10-29T19:24:13.673 に答える