2013-08-04 62 views
3

我是一個總noob嘗試在Excel中使用VBA創建一個空白的MS Access數據庫。我想命名新的數據庫「tblImport」。這是使用代碼I'm:如何使用VBA創建空白MS Access數據庫?

Sub makedb() 
    Dim accessApp As Access.Application 
    Set accessApp = New Access.Application 
    accessApp.DBEngine.CreateDatabase "C:\tblImport.accdb", dbLangGenera 
    accessApp.Quit 
    Set accessApp = Nothing 
    End Sub 

我收到以下錯誤信息:

「運行時錯誤3001:應用程序定義或對象定義的錯誤」

我能做些什麼?

回答

9

在CreateDatabase方法的語言環境不變的名稱是錯誤的:

此:
accessApp.DBEngine.CreateDatabase "C:\tblImport.accdb", dbLangGenera

應該是:
accessApp.DBEngine.CreateDatabase "D:\tblImport.accdb", DB_LANG_GENERAL

改變這一點,你的代碼應該工作。 (它至少對我來說)。

+0

這是快速回答。它也適用於我。謝謝:D – steinbitur

+0

++ Yup的工作,但這不是錯誤信息的原因:)看到我的答案。 –

2

老問題,但它對我很有用。似乎你甚至不需要Access對象。

Access.DBEngine.CreateDatabase "D:\tblImport.accdb", DB_LANG_GENERAL 

適合我。

+1

該方法確實會創建一個'Access.Application'實例。但是在完成'CreateDatabase'後它會立即消失。 – HansUp

+2

很高興知道。無論如何,它代碼更少。 – brainac

+0

我不反對這個特定的行,但我強烈反對評論的哲學:沒有錯誤捕獲也是更少的代碼,屏幕更新是更少的代碼等。在vba中很少見,更少的代碼行轉化爲更強大的實施和更高的效率,並且往往導致兩者都不。 – CWilson

2

如果您打算使用您創建的自動化對象,則應使用第一種方法。您可以打開表單,使用DoCmd語句等,只需將每個語句的前面加上「accessApp」即可。例如,我使用TempVars來保存用戶數據。我可以使用自動化打開相關的數據庫,然後做

accessApp.TempVars.Add "CurrentUser", TempVars.CurrentUser

從活動數據庫通過CurrentUser值到新的數據庫。

當所有你想要做的就是創建一個新的數據庫做一個函數,如DoCmd.TransferDatabase上,你可以只使用

Access.DBEngine.CreateDatabase "D:\tblImport.accdb", DB_LANG_GENERAL

+0

歡迎來到SO。不幸的是,並不是每個新用戶都可以像你一樣寫好帖子。雖然,您可能對Meta上的這些帖子感興趣:http://meta.stackexchange.com/a/114538/181303和http://meta.stackexchange.com/questions/12119/ – ForceMagic

1

老問題。這是我的兩分錢。你有一個錯字...

dbLangGenera應該dbLangGeneral

更多關於它在Workspace.CreateDatabase Method (DAO)

投票關閉這個問題按照Dealing with questions with obvious replies

試試這個。這工作。

Sub makedb() 
    Dim accessApp As Access.Application 
    Set accessApp = New Access.Application 

    accessApp.DBEngine.CreateDatabase "C:\tblImport.accdb", dbLangGeneral 
    accessApp.Quit 

    Set accessApp = Nothing 
End Sub 

編輯:會刪除這個答案,並張貼的評論,一旦後關閉。