2016-08-05 18 views
1

次のコードを実行しようとすると次のメッセージが表示されます。Excel vba |

Sub Refresh_Pivot() 
Dim AWB As Workbook 
Dim pvtTable As Object 
Dim appAccess As Object 

'Save workbook 
Set AWB = ActiveWorkbook 
AWB.Save 

    'Open Access Application 
    Set appAccess = CreateObject("Access.Application") 
    appAccess.OpenCurrentDatabase "S:\AMA\MPF\MPF Projects\MPF Loss Emergence\MPFV4.accdb" 
    appAccess.Visible = True 

'Set Message bar in excel t o notify user of update process 
oldStatusBar = Application.DisplayStatusBar 
Application.DisplayStatusBar = True 
Application.StatusBar = "Retrieving information, please be patient...." 



    'Execute Access Macro containing lineup of queries and scrubs 
    appAccess.DoCmd.RunMacro "0_Retrieve_Scrub" '<-- As it appears in the Macro Group in the Access Interface. 


     'Close Access 

     appAccess.DoCmd.Quit 


     'Return message bar to original status 
     Application.StatusBar = False 
     Application.DisplayStatusBar = oldStatusBar 


    Set pvtTable = Worksheets("1. Roll Rate Pivots").Range("C13").PivotTable 
    pvtTable.RefreshTable 

    Columns("B:B").EntireColumn.AutoFit 
    Columns("C:j").Select 
    Selection.ColumnWidth = 13 

    'Notify user process has completed 
    MsgBox ("Update complete") 
End Sub 

基本的にAccessデータベースを開き、Accessマクロを実行してAccessを終了します。私は、このコードがトリガーされる同じExcelファイル内のマクロによって作成されたテーブルへのODBC接続を持っています。私はこれを2007年のExcelで成功させました。私たちは最近、オフィス2013をアップグレードしました。私たちはこのメッセージを受け取り始めました。デバッグすると、このコード行が強調表示されます。最初は、そのバージョンのオブジェクトライブラリと何か関係がありましたが、最新のものすべてがチェックされています。誰もが同様の問題に遭遇しましたか?どんな助けでも大歓迎です。

appAccess.DoCmd.RunMacro「0_Retrieve_Scrub」

Error message

+0

Office 2013は64ビット版ですか?あなたはそれがまだ正しく接続されていることを確認するために、Accessであなたのリンクテーブルマネージャをチェックすることができますか?マクロはVBA関数を実行するためにRunCodeを使用しますか、それともステップスルーアクセスコマンドですか? – dbmitch

+0

私たちはOffice 2013の32ビット版を実行しています。実際には変わったことは、コードを新しいファイルにコピーするときです(もちろんピボットテーブルの更新をコメントアウトする)。 "Docmd"はAccess vbaメソッドです。 – Deanko

+0

おそらくセキュリティ設定ですか? ExcelとAccessの両方でマクロ設定を「すべてのマクロをアクティブにする」に設定してみてください。 – Andre

答えて

0

は、あなたが参照しているマクロ名が開かれているデータベース内およびマクロ名の大手0という存在していることを特定の100%何の問題も生じていないのですか?

+0

はい、dbmitchの他のコメントに記載されているように、別のExcelスプレッドシートで同じコードを実行できるため、マクロ名は問題になりません。 – Deanko

+0

もう1つのアプローチは、マクロを実行するためにその行を使用する代わりに、自動的に実行されるマクロにデータベースのオープンを結ばせることです(自動マクロが単にこのマクロを呼び出す場合でも)。 「AutoExec」と呼ばれるマクロは、データベースが開くと自動的に実行されます。起動したいマクロを呼び出すautoexecマクロを作成します.DecCmd行は必要ありません。 – Bloomie