2013-08-04 63 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 

编辑:会删除这个答案,并张贴的评论,一旦后关闭。