6

我完全是个菜鸟,试图在 Excel 中使用 VBA 创建一个空白的 MS Access 数据库。我想将新数据库命名为“tblImport”。这是我正在使用的代码:

   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:应用程序定义或对象定义错误”

我能做些什么?

4

4 回答 4

9

CreateDatabase 方法中的 locale 常量名称错误:

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

应该:
accessApp.DBEngine.CreateDatabase "D:\tblImport.accdb", DB_LANG_GENERAL

改变它,你的代码应该可以工作。(至少对我有用)。

于 2013-08-04T09:42:57.777 回答
4

老问题。这是我的两分钱。你有错别字...

dbLangGenera应该dbLangGeneral

Workspace.CreateDatabase 方法 (DAO)中了解更多信息

根据处理具有明显答复的问题投票结束此问题

尝试这个。这行得通。

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

编辑:将删除此答案并在帖子关闭后将其作为评论发布。

于 2017-03-15T06:11:24.660 回答
3

老问题,但它对我很有用。似乎您甚至不需要 Access 对象。

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

对我来说很好。

于 2014-01-02T16:35:29.230 回答
2

如果您打算使用已创建的自动化对象,则应使用第一种方法。您可以打开表单、使用 DoCmd 语句等,只需在每个语句前加上“accessApp”即可。例如,我使用 TempVars 来保存用户数据。我可以使用自动化打开一个相关的数据库,然后做

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

将 CurrentUser 值从活动数据库传递到新数据库。

当您只想创建一个新数据库来执行诸如DoCmd.TransferDatabaseon 之类的功能时,您可以使用

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

于 2014-02-03T21:08:47.667 回答