首页 > 解决方案 > (Excel) 访问 CodeModule 时 VBA 崩溃

问题描述

我正在尝试向 VBA 代码模块插入一些代码,并且在读取 CodeModule 属性时 excel 崩溃。这是python中的示例代码:

excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = False
workbook = excel.Workbooks.Open("C:\\test\\test1.xlsx")
excel.VBE.MainWindow.Visible = False
sheet = workbook.Worksheets(1) 
vbp = workbook.VBProject
comp = vbp.VBComponents(workbook.CodeName)
cm = comp.CodeModule   #     <--------------- !!! Excel crashes here
curLine = cm.CreateEventProc("Open", "Workbook")
cm.InsertLines(curLine + 1, "some text")

错误应用程序名称:EXCEL.EXE,版本:16.0.11231.20174,时间戳:0x5c5e3867

错误模块名称:combase.dll,版本:10.0.14393.2791,时间戳:0x5c5a43d3

异常代码:0xc0000005

操作系统:Windows Server 2016 Standard,最新

这不是 pywin32 特定的问题,我已经对此进行了测试。我也试过 x86 和 x64 办公版本,都崩溃了。有趣的是,excel com 对象仍然存在,我仍然能够操作它并保存文件。但是 VBProject 是空的。

任何想法在哪里挖掘?

标签: pythonexcelvbapythoncom

解决方案


该文件是 xlsx,因此它不会有 VBProject。诚然,它应该抛出错误而不是崩溃。您需要 xlsm 文件类型。


推荐阅读