C#编程访问Excelmacros

我正在处理Excel文件的目录以获取有关每个文件的信息。 我正在尝试使用C#Excel互操作来收集有关与这些文件中的一些相关的VBAmacros的信息。 代码如下。 问题是,没有一个Excel文件具有编程访问macros启用。 我可以在文件的本地副本上手动切换,但是我目前只能读取文件的目录。 有什么办法可以暂时改变我的代码内的编程访问设置(读取VBA代码,不作任何改变),没有写权限?

此外,我只知道如何手动更改程序访问(通过每个Excel文件中的设置)。 看到我可能最终只需要读/写访问权限,有没有什么办法可以在批处理中做到这一点,以节省大量的时间手动打开和closures文件?

VBA.VBProject project = WorkBook.VBProject; VBA.VBComponents VBComponents = project.VBComponents; string projectName = project.Name; VBA.vbext_ProcKind procedureType = Microsoft.Vbe.Interop.vbext_ProcKind.vbext_pk_Proc; VBA.VBComponent vbFunction; foreach (Excel.Worksheet sheet in VBComponents) { vbFunction = sheet as VBA.VBComponent; if (vbFunction != null) { VBA.CodeModule componentCode = vbFunction.CodeModule; int componentCodeLines = componentCode.CountOfLines; int line = 1; while (line < componentCodeLines) { //EXAMINE LINE line++; } } } 

编辑:

生成确切的错误信息是“COMException未处理 – Visual Basic项目的编程访问不受信任”。

我已经发现,如果我打开一个只读文件并更改设置,我会得到不同的错误信息。 我无法保存文件,但是如果保持打开状态,当它到达第一个.xlsm文件时,将显示错误消息“COMException未处理 – 由于项目受到保护,无法执行操作”。

“信任访问Visual Basic项目”设置可以在工具 – >macros – >安全,在“受信任的发布者”选项卡上find。 (这适用于Excel 2003;对于2007,可以在Excel选项 – >信任中心 – >信任中心设置 – >macros设置中find)。

这是Excel 应用程序设置,适用于用户从此处开始的所有Excel实例(无论是手动还是编程启动)。

您需要确保在Excel运行的任何位置启用此设置(独立于您正在处理的Excel文件的存储位置)。

(您不能以编程方式更改此设置 – 这将使其成为完全无意义的设置)。


编辑:你现在正在得到一个不同的错误:“COMException …项目被保护”。

如果Excel文件中的VBA项目受密码保护(项目属性,保护选项卡),将会出现此错误。 在这种情况下,您需要在尝试打开项目之前解锁项目。

我已经写了一些访问受保护项目中的VBA代码的macros,但在我的情况下,我一次只做一个文件,所以我只是要求用户解锁并重试。

我不确定是否有可能以编程方式解锁项目,如果你知道密码(但我敢肯定,如果你不知道这是不可能的)。