我正在使用一个Excel文件目录来获取每个文件的信息。我尝试使用C# Excel互操作性来收集与某些文件关联的VBA宏的信息。下面是此代码。问题在于,没有任何Excel文件启用了对宏的编程访问。我可以在本地副本上手动切换此选项,但我当前只有对文件目录的读取访问权限。在没有写入权限的情况下,是否有办法在我的代码中临时更改编程访问设置(以读取VBA代码而不进行任何更改)?
另外,我只知道如何通过每个Excel文件中的设置手动更改编程访问权限。鉴于我最终可能只需要获得读/写访问权限,是否有任何方法可以批量处理以节省大量手动打开和关闭文件的时间?
另外,我只知道如何通过每个Excel文件中的设置手动更改编程访问权限。鉴于我最终可能只需要获得读/写访问权限,是否有任何方法可以批量处理以节省大量手动打开和关闭文件的时间?
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 - 无法执行该操作,因为项目受到保护”。