(Excel) VBA аварийно завершает работу при доступе к CodeModule

Я пытаюсь вставить код в модуль кода 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 пуст.

Есть идеи куда копать?


person bozo    schedule 13.02.2019    source источник
comment
Я добавил теги Python.   -  person S Meaden    schedule 13.02.2019
comment
Может быть, у вас не получится импортировать в книгу модуль при его открытии вместо того, чтобы пытаться добавить его через python?   -  person Zac    schedule 13.02.2019
comment
Зак, не могли бы вы уточнить, пожалуйста?   -  person bozo    schedule 14.02.2019


Ответы (1)


Это файл в формате xlsx, поэтому у него не будет VBProject. По общему признанию, он должен выдавать ошибку вместо сбоя. Вам нужен файл типа xlsm.

person S Meaden    schedule 13.02.2019
comment
Спасибо за вклад! К сожалению, он продолжает вылетать из-за файла xlsm. Я даже добавил код через редактор, чтобы убедиться, что модуль кода существует - все равно не повезло. - person bozo; 13.02.2019