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

时间:2015-10-07 19:50:26

标签: vba ms-access vb6 access-vba migrate

我在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表单启动,但它在启动时崩溃,显示此错误“运行时错误'3024'无法找到文件'C:\ db.mdb'”。 我觉得我已经走到了解决方案的一半。但我不知道我在这里错过了什么?

2 个答案:

答案 0 :(得分:1)

在不知道VB6应用程序的结构和访问文件以及它们的作用的情况下,几乎不可能给出任何有用的答案。

您想要做的事情并不容易实现,正如评论中所述,VBA项目并非旨在以这种方式运作。

但是这里有一些建议。

  1. 调查RunMacro命令,看看这对你有用。
  2. 您可以尝试使用像autohotkey这样的工具来记录您想要的鼠标点击,并从您的VB6应用程序重放。
  3. 看看提取业务逻辑的VBA部分,直接将代码复制并粘贴到VB6应用程序中。根据代码,这可能有效,也可能无效。
  4. 开始缓慢的重写过程(但不要在VB6中重写,使用VB.Net,C#或做一个Web应用程序或至少类似于2015应用程序的东西)。
  5. 如果您希望我的诚实建议开始迁移到更现代的解决方案,例如VB.NET,那么您在2020年就不会遇到更糟糕的问题。

    您的问题有银弹。

答案 1 :(得分:0)

最好在VB6中使用按钮设计一个新表单,如你所说,还有一些文本/列表/你要显示结果的任何内容,然后你复制/粘贴VBA将代码写入button_click(s)事件以执行它,并将一些输出添加到文本/列表/您决定放在VB6表单上的任何内容。

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