如何使用VBA自动化多个Office应用程序?

时间:2009-05-21 19:54:06

标签: excel ms-access vba ms-access-2007 access-vba

虽然我已经在MS Access 2007和Excel 2007的单个应用程序中完成了VBA项目,但我还没有同时自动化多个应用程序。通用项目是打开访问,运行一些将数据附加到各种表的更新查询。然后Excel需要获取数据。 Excel中需要进行一些格式化更改,例如不会自动更改日期范围的分组。最后,我计划将其构建出来,以便自动通过电子邮件发送excel文件。

这部分内容很清楚如何实现它,例如Excel将通过ODBC从Access获取数据。但主VBA应该在哪里生活?我可以在Access中有一个开始运行Access VBA的按钮,但是让Access VBA开始操作Excel是一个好习惯吗?这会让调试变得困难吗?

6 个答案:

答案 0 :(得分:3)

要从Access开始,请添加对Excel对象库的引用。然后使用对象浏览器熟悉Excel对象层次结构在Access中的外观。它会有所不同,因为Excel代码中的顶级对象是隐式的(就像在Access中一样),并且在Access中编码时必须显式引用。

Access Developers Handbook提供了有关从Access自动执行其余Office的优秀章节。

最后,最好是一旦使用对其他应用程序的自动化库的引用进行编码来帮助您编程,您希望切换到后期绑定,以便删除引用。这意味着不使用任何外部库的特定数据类型(您通常使用普通对象变量)并且不使用外部库中定义的任何常量。我的后期绑定生产代码通常包括早期绑定版本,以及后期绑定版本。

答案 1 :(得分:1)

我最近做了一些与此非常相似的事情,并且发现我可以使用内置CSS输出带有格式的HTML,可以很好地加载到Excel中。我使用Access来允许用户构建他们所需的输出,只打开Excel来显示结果。您可能会发现HTML输出可以生成更好的电子邮件。

答案 2 :(得分:1)

您可以将代码放在Access或Excel中。根据我的经验,这比在两者之间拆分代码更容易(也可以)。

如果发现自动化代码运行速度太慢,则可以拆分代码,以便Access中的函数运行Access,Excel中的函数运行Excel,主代码只运行两者中的例程。在这种情况下,您可以将主代码放在哪里,从而获得最好的用户界面来启动。我已经使用了C,Access,Word和Excel,如果所有代码都在其他地方,那么放置开始按钮并不重要。

如果您的用户或维护人员更熟悉一个应用程序,您可能希望将主代码或主代码放在那里,但更多时候我发现将主代码或主代码放在应用程序的内容中会更好,所以我在另一个伙伴中根本没有代码。

从简短的描述中可以看出,在Excel中将会完成更多的工作,所以我会将所有代码放在那里。

从Access中提取数据甚至不需要访问应用程序对象 - DAO或ADO或ODBC对象将起作用(甚至DDE),这将比使用它更快,更强大,更容易,更好让两个应用程序都打开并自动化另一个应用程序。

如果从Access开始,听起来这个项目需要Excel自动化对象。现在效果很好,但只使用Excel和DAO对象,它仍然更慢,更脆弱。

答案 3 :(得分:1)

在Access VBA中完成所有工作。有关示例代码,请参阅以下URL

Modules: Sample Excel Automation

Modules: Transferring Records to Excel with Automation

另请注意,如果您正在处理多个版本的Excel,则后期绑定变得必不可少。延迟绑定意味着您可以安全地删除引用,并且只有在应用程序执行相关代码行时才会出错。而不是在启动应用程序时出错并且根本不允许应用程序中的用户。或者当遇到mid,left或trim函数调用时。

当您不知道外部应用程序的版本将驻留在目标系统上时,这也非常有用。或者,如果您的组织正处于从一个版本移动到另一个版本的过程中。

有关更多信息,包括其他文字和一些详细链接,请参阅Late Binding in Microsoft Access页。

就发送电子邮件而言,Microsoft Access Email FAQ

有很多选项

答案 4 :(得分:1)

我认为您正在寻找的关键词是“微软办公自动化”。

使用您喜欢的支持COM接口的编程语言创建应用程序,然后使用自动化在不同的办公应用程序中进行操作。

点击c# How to access an excel cell?此处How to read data of an excel file using c# ?和Google。

答案 5 :(得分:-1)

虽然Access是我进入编程世界的入口点,但我还没有完成VBA。从Access 97迁移到Visual Basic很简单,我记得我使用Access编写了很多东西,更喜欢VB形式来执行多种任务(不一定是数据库的东西)。

这就是为什么我认为你应该坚持使用Access,并在那里,在VBA的帮助下,在Excel等中做你的东西。

祝你好运