是否可以从 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项目并非设计为以这种方式工作。
不过这里有一些建议。
- 调查RunMacro 命令,看看它是否对您有用。
- 您可以尝试使用像 autohotkey 这样的工具来记录您想要的鼠标点击并从您的 VB6 应用程序重播。
- 查看 VBA 中的业务逻辑部分,然后直接将代码复制并粘贴到您的 VB6 应用程序中。这可能有效也可能无效,具体取决于代码。
- 开始缓慢的重写过程(但不要在 VB6 中重写,使用 VB.Net、C# 或做一个网络应用程序或至少类似于 2015 应用程序的东西)。
如果您希望我的诚实建议开始迁移到更现代的解决方案,例如 VB.NET,这样您在 2020 年就不会遇到更糟糕的问题。
没有解决您的问题的灵丹妙药。
我在 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项目并非设计为以这种方式工作。
不过这里有一些建议。
- 调查RunMacro 命令,看看它是否对您有用。
- 您可以尝试使用像 autohotkey 这样的工具来记录您想要的鼠标点击并从您的 VB6 应用程序重播。
- 查看 VBA 中的业务逻辑部分,然后直接将代码复制并粘贴到您的 VB6 应用程序中。这可能有效也可能无效,具体取决于代码。
- 开始缓慢的重写过程(但不要在 VB6 中重写,使用 VB.Net、C# 或做一个网络应用程序或至少类似于 2015 应用程序的东西)。
如果您希望我的诚实建议开始迁移到更现代的解决方案,例如 VB.NET,这样您在 2020 年就不会遇到更糟糕的问题。
没有解决您的问题的灵丹妙药。