2016-01-20 34 views
1

我已經開始涉足MS Office產品自動獲勝形式,並且遇到了困難。正如標題所示,我在VS2010(.NET 4.0)中使用C#,連接到Access 2013後端。從C#Winform調用Access 2013模塊

這是我的問題,我試圖在我的程序的後端數據庫中運行一個模塊。我見過一些職位在這裏堆棧和閱讀MSDN上幾篇文章,並想出了以下內容:

using Access = Microsoft.Office.Interop.Access; 
void RunAccessModule() 
{ 
    try 
    { 
     Access.Application oAccess = new Access.Application(); 
     oAccess.OpenCurrentDatabase("H:\\MyConnection\\UtilityBackEnd.accdb", false); 
     oAccess.Run("MakeProjectTable"); //Name of procedure in module 
     oAccess.CloseCurrentDatabase(); 
    } 
    catch (Exception ex) 
    { 
     ex.Message; 
    } 
} 

當我運行我的程序,我得到的是一條錯誤:"Microsoft Access cannot find the procedure 'MakeProjectTable.'"我已經試過更具體的運行命令(即oAccess.Run("Module1.MakeProjectTable");),但我收到了類似的錯誤消息(cannot find 'Module1.MakeProjectTable.'。任何人都可以看到我到目前爲止,並/或建議一個問題?

+0

作爲記錄中, Run()方法只能調用VBA代碼。改用DoCmd。 –

+1

在'UtilityBackEnd.accdb'數據庫的標準模塊中'MakeProjectTable'是一個'Public'過程嗎? – HansUp

+0

不,我現在要改變它 – alwaysthestudent

回答

1

您的C#代碼將工作if您已將您的VBA(訪問)代碼聲明爲

Public Sub MakeProjectTable() 

在「常規」Module中,而不是Class ModuleMicrosoft Access Class Object。換句話說,如果你在Access中打開數據庫,並期待在VBA編輯器中Sub它必須位於一個模塊中的工程資源管理器的「模塊」文件夾下:

Module.png

+1

這似乎是正確的;這是我2天前試圖告訴他們的。 :-)如果他們仍然有問題,在獨立的Access會話中打開'H:\ MyConnection \ UtilityBackEnd.accdb',並確保它實際工作:'Application.Run「MakeProjectTable」' – HansUp

+1

是的,我看到了。我想也許一張漂亮的照片可能會有幫助。 :) –

+0

我認爲它應該!它發生在我只說*標準*模塊是不夠的。 :-( – HansUp