Извините за длинный заголовок.Неиспользованная функция в Excel addin вызывает сбой только при втором запуске и при запуске через VBScript
У меня есть несколько файлов .xlsm, которые содержат много кода, поэтому я переместил повторяющиеся части в файл addin .xlam. Я использую скрипт .vbs, чтобы открывать все файлы один за другим и запускать макрос в каждом.
Проблема
Проблема я столкнулся в том, что на второй запуска сценария .vbs, первенствует аварий и дает то, что кажется очень родовую ошибку, сказал here быть " Ошибка автоматизации ":
Script: C:\Users\~\Desktop\test\test.vbs
Line: 5
Char: 1
Error: The server threw an exception.
Code: 80010105
Source: (null)
к моему удивлению, я был в состоянии воспроизвести эту аварию даже после удаления 99% содержания моих файлов.
test.vbs:
Dim xlApp
Dim xlBook
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\Users\~\Desktop\test\test.xlsm")
xlApp.Run "Auto.Run" '<~~ error on this line
xlBook.Save
xlBook.Close (True)
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
test.xlsm:
test.xlam has a module Module1, test.xlsm has a Module Auto and a Reference to test.xlam
test.xlsm, Auto
:
Sub Run()
MsgBox "hello"
Test.Load
MsgBox "goodbye"
End Sub
test.xlam, Module1
Sub Load()
MsgBox "Load"
End Sub
Function Other()
End Function
С прокомментированной функцией Other()
код работает нормально (говоря привет, загрузка и до свидания). Он также отлично работает, если макрос запускается из excel. Только когда присутствует Other()
, а Run()
запускается через файл .vbs, есть ошибка (сразу после приветствия).
Обход
Если я открываю test.xlsm
, сохраните его, и закройте ее снова между каждым пробеге test.vbs
, нет никаких проблем. Я считаю, что это связано с добавлением, а не с электронной таблицей, потому что в моем исходном скрипте, который открыл несколько файлов excel, нужно открыть и сохранить только один файл.
Я также заметил, что файл excel немного больше в своем «проблемном» состоянии, и когда я его открываю и сохраняю, он возвращается к чуть меньшему оригинальному размеру. (EDIT: Это по крайней мере частично вызвано новыми потоками кэша __SRP_4 и __SRP_5 внутри файла vbaProject.bin
, который я извлек с помощью this answer (oh и this). После того, как вручную удалил все записи SRP, я смог запустить .vbs скрипт снова без проблем, хотя так же, как открытого копи-близко стратегии, это только временно, а потом рухнет на третьем ходу, а не второй.)
Вопрос
ли Addins не подходит для общий код? Могут ли они не содержать функции? Есть ли способ обойти эту катастрофу, кроме того, что я сейчас делаю?
Любые мысли приветствуются.
Наиболее вероятно, связано [с этим] (http://stackoverflow.com/q/213375/4088852) – Comintern