如何以编程方式查看旧的Access数据库的VBA代码?

问题描述

为了促进向Windows 10和Office 365环境的迁移,我需要编写一个程序(使用C#或VB.NET),该程序将读取较早的Access数据库(从2003年以来的任何版本)的VBA代码并查找对于特定的代码段,如果可能,请更改该代码并保存。这需要在大约500个Access数据库上执行。

我以前在Word和Excel中已经做到了这一点,没有太多麻烦,但是我似乎无法使其用于Access。

我已经这样尝试过了:

*a

像这样:

*

但是我收到类似以下错误

System.Runtime.InteropServices.COMException:'表达式您 输入是指已关闭或不存在的对象。'

在我的一生中,我无法使它正常工作,任何帮助将不胜感激。

解决方法

我不确定AccessObject还是可以与其他MS-Office程序一起使用,但是我用来访问模块的方式是通过VBProject.VBComponents

以下方法应该起作用:

using Microsoft.Vbe.Interop;
using MSAccess = Microsoft.Office.Interop.Access;

//...

var accessApp = new MSAccess.Application();
accessApp.OpenCurrentDatabase(inputMdb,false,password);
foreach (VBComponent vbc in accessApp.VBE.ActiveVBProject.VBComponents)
{
    var module = vbc.CodeModule;

    // To print all code in the file:
    Console.WriteLine(module.Lines[1,module.CountOfLines]);

    // To export to file:
    vbc.Export(somePath);

    // To insert code:
    module.InsertLines(4,newLineOfCode);

    // To replace code:
    module.ReplaceLine(5,modifiedLineOfCode);
}

accessApp.CloseCurrentDatabase();
accessApp.Quit();