【问题标题】:How to use VBA to automate several Office applications?如何使用 VBA 自动化多个 Office 应用程序?
【发布时间】:2009-05-21 19:54:06
【问题描述】:

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

其中的某些部分很清楚如何完成它,例如 Excel 将通过 ODBC 从 Access 获取数据。但是主 VBA 应该放在哪里呢?我可以在 Access 中有一个开始运行 Access VBA 的按钮,但是让 Access VBA 开始操作 Excel 是一种好习惯吗?这是否让调试变得困难?

【问题讨论】:

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


    【解决方案1】:

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

    Access 开发人员手册中有关于从 Access 自动化 Office 其余部分的优秀章节。

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

    【讨论】:

    • 谢谢你,大卫。我在亚马逊上找不到与该标题完全相同的书。你能给我指点吗?我很感激。
    • 访问mcwtech.com/Books.aspx 是的,最后一个版本适用于 Access 2002,但它仍然非常相关。
    【解决方案2】:

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

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

    看这里c# How to access an excel cell? 和这里How to read data of an excel file using c# ? 和谷歌。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        在 Access VBA 中完成所有工作。部分示例代码见以下网址

        Modules: Sample Excel Automation

        Modules: Transferring Records to Excel with Automation

        另外请注意,如果您正在处理多个版本的 Excel,后期绑定就成为必需品。后期绑定意味着您可以安全地删除引用,并且只有在应用程序执行有问题的代码行时才会出现错误。而不是在启动应用程序时出错并且根本不允许用户进入应用程序。或者当点击中间、左侧或修剪函数调用时。

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

        有关更多信息,包括附加文本和一些详细链接,请参阅Late Binding in Microsoft Access 页面。

        就电子邮件而言,Microsoft Access Email FAQ 有许多选项

        【讨论】:

          【解决方案5】:

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

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

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

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

          从 Access 中提取数据甚至不需要 Access 应用程序对象 - DAO、ADO 或 ODBC 对象都可以工作(甚至是 DDE),这将更快、更健壮、更容易、更好让两个应用程序都打开并自动化另一个应用程序。

          如果您从 Access 开始,听起来这个项目需要 Excel 自动化对象。这现在运行良好,但仅使用 Excel 和 DAO 对象仍然慢得多且更脆弱。

          【讨论】:

            【解决方案6】:

            虽然 Access 是我进入编程世界的切入点,但我已经很久没有使用 VBA 了。从 Access 97 迁移到 Visual Basic 很容易,我记得我使用 Access 编写了很多东西,更像是 VB 表单来执行多种任务(不一定是数据库东西)。

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

            祝你好运

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-09-19
              • 1970-01-01
              • 2013-10-27
              • 2020-09-28
              • 1970-01-01
              • 2021-08-13
              相关资源
              最近更新 更多