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

虽然我已经在MS Access 2007和Excel 2007的单个应用程序中完成了VBA项目,但我还没有同时自动执行多个应用程序。 通用项目是开放访问,运行一些更新查询,将数据附加到各个表中。 然后Excel需要获取数据。 Excel中需要一些格式更改,例如不会自动更改date范围的分组。 最后,我打算build立这样的Excel文件将自动通过电子邮件发送。

有些部分清楚如何完成它,比如Excel将通过ODBC从ODBC获取数据。 但是VBA主人应该在哪里? 我可以在Access中有一个可以开始运行Access VBA的button,但是Access VBA开始操作Excel是一个好习惯吗? 这是否使debugging困难?

要从Access入门,添加对Excel对象库的引用。 然后使用对象浏览器熟悉Excel对象层次结构在Access中的外观。 这将会有所不同,因为Excel代码中的顶级对象是隐式的(因为它在Access中),并且在Access中进行编码时必须被明确引用。

Access开发者手册有关于从Access访问其他Office的自动化的优秀章节。

最后,一旦您使用对其他应用的自动化库的引用进行编码来帮助您编程,最好是一旦您想切换到后期绑定,以便删除引用。 这意味着不使用任何外部库的特定数据types(大多数情况下使用普通对象variables),也不使用外部库中定义的常量。 我的带有后期绑定的产品代码通常包括早期绑定版本,以及后期绑定版本。

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

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

看看这里c#如何访问一个Excel单元格? 这里如何读取使用C#的Excel文件的数据? 和Google。

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

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

模块:示例Excel自动化

模块:使用自动化将logging传输到Excel

还要注意的是,如果你正在处理多个版本的Excel,后期绑定就成了必需。 后期绑定意味着您可以安全地删除引用,只有在应用程序执行代码行时才会出现错误。 而不是在启动应用程序时出错,而不允许应用程序中的用户。 或者当打中间,左或调整函数调用。

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

有关更多信息,包括其他文本和一些详细的链接,请参阅Microsoft Access中的“ 晚期绑定”页面。

就发送电子邮件而言, Microsoft Access电子邮件常见问题中有许多选项

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

如果您发现自动化代码运行速度过慢,则可以拆分代码,以便Access可以通过Access中的函数以及Excel中的函数运行Excel,而主代码只需在两者中运行例程。 在这种情况下,您可以将主代码放在任何地方,从而获得用于启动事物的最佳用户界面。 我已经使用了C,Access,Word和Excel,并且如果所有代码都在其他地方,那么您将启动button放在哪里并不重要。

如果你的用户或维护者对一个应用程序更熟悉,你可能希望把你的主代码或主代码放在那里,但是更多的时候我觉得最好把主代码或者主代码放在应用程序的内部,这样我就可以在另一方没有任何代码。

从简要的描述来看,听起来更多的工作将在Excel中完成,所以我会把所有的代码放在那里。

从Access中提取数据甚至不需要访问应用程序对象–DAO或ADO或ODBC对象将工作(甚至DDE),这将比起这两个应用程序要快得多,更健壮,更容易,更好打开和自动从另一个。

如果你从Access开始,这听起来像这个项目将需要一个Excel自动化对象。 现在运行的很好,但是只要使用Excel和DAO对象,它的运行速度还是比较慢,也比较脆弱。

尽pipeAccess是我进入编程世界的入口,但我还没有做过很多年的VBA。 从Access 97迁移到Visual Basic非常简单,我记得我使用Access编写了很多类似VB的窗体,用于执行多种任务(不一定是数据库内容)。

这就是为什么我认为你应该坚持访问,并从那里,在VBA的帮助下,做你的东西在Excel等..

祝你好运