是否可以从 VB6 应用程序 运行 一个 VBA 文件?

Is it possible to run a VBA file from a VB6 application?

我在 Access .mdb 文件中用 VBA 编写了大量代码,其中包含表单并连接到 Access 数据库。我需要将此代码迁移到 VB6 应用程序。重写所有内容是不切实际的,因为太多了。

有没有一种方法可以从带有按钮的 VB6 表单中调用 VBA 文件,这将允许用户通过简单地单击相应的按钮来启动这些 VBA 模块中的每一个? VB6 中的哪一行代码允许启动 VBA 文件?

更新

我终于成功地弄清楚了如何使用此指令从我的 VB6 表单启动 VBA mdb 文件:

Call Shell("C:\Program Files (x86)\Microsoft Office\OFFICE11\MSACCESS.EXE C:\presto.mdb /runtime /cmd", 1)

因此 VBA 项目现在从 VB6 表单启动,但它在启动时崩溃,显示此错误 "Runtime error ‘3024’ Could not find file ‘C:\db.mdb’"。 我觉得我已经完成了解决方案的一半。但我不知道我在这里错过了什么?

最好在 VB6 中设计一个新的表单,如你所说的那样带有按钮,但也带有一些文本/列表/任何你想显示结果的东西,然后你 copy/paste VBA 代码到 button_click(s) 事件中以执行它并向该 vba 代码添加一些输出到文本/列表/任何内容(s) 你决定换成VB6表格了。

编辑:好的,所以考虑到您的评论,也许这个技巧可以帮助避免重写数千行代码:在 VBA 代码中添加一个 while 循环,在存在时触发某些 Sub 或 Function系统上的标志(例如特定的 c:\temp\fileFlag.txt),所以一旦它出现,就会调用 VBA 代码...如果 VB6 控制标志,它会完成这项工作? :)

如果不了解您的 VB6 应用程序和访问文件的结构以及它们的作用,几乎不可能给出任何有用的答案。

您想要做的事并不容易,如评论中所述VBA项目并非设计为以这种方式工作。

不过这里有一些建议。

  1. 调查RunMacro 命令,看看它是否对您有用。
  2. 您可以尝试使用像 autohotkey 这样的工具来记录您想要的鼠标点击并从您的 VB6 应用程序重播。
  3. 查看 VBA 中的业务逻辑部分,然后直接将代码复制并粘贴到您的 VB6 应用程序中。这可能有效也可能无效,具体取决于代码。
  4. 开始缓慢的重写过程(但不要在 VB6 中重写,使用 VB.Net、C# 或做一个网络应用程序或至少类似于 2015 应用程序的东西)。

如果您希望我的诚实建议开始迁移到更现代的解决方案,例如 VB.NET,这样您在 2020 年就不会遇到更糟糕的问题。

没有解决您的问题的灵丹妙药。