Скорее всего, это проблема XY.
Чтобы решить эту проблему, не нужно выяснить какой-нибудь случайный код VBA, который дает вам аналогичную запись в журнале событий APPCRASH - никто этого не сделает.Или, если что-то случится, то вы все равно не узнаете ничего нового.
Чтобы решить эту проблему, нужно подключить отладчик VS к процессу EXCEL.EXE, воспроизвести шаги пользователя, а затем наблюдать за разрывом VSна необработанное исключение в коде C #.
Скорее всего, вы получаете где-то COMException
, ваш экземпляр Excel внезапно умирает в результате и записывает APPCRASH, который является побочным эффектом возникшего исключениявне процесса, в управляемом коде, который породил процесс EXCEL.EXE.
Убедитесь, что ваш код C # правильно освобождает все COM-объекты, к которым он обращается (это все Worksheet
, Range
/ ячейки,Worksheets
коллекций, Application
экземпляр) и не связывает вызовы членов объекта (что приводит к утечке памяти), например:
xlApp.Worksheets("foo").Range("A1").Value = 42;
Вышеприведенная утечка коллекции Worksheets
, Worksheet
экземпляр и Range
для доступной ячейки.
Управляемая и COM-потоковая модели также не совсем совместимы, поэтому, если ваш код C # обращается к COM-объектам из несколькихeads, ожидайте COMException
изобилие.
Первое, что нужно сделать, это воспроизвести проблему с подключенным отладчиком и посмотреть, вызывает ли ваш код C # исключение.Попытка найти код VBA, который может привести к сбою Excel, не поможет ни с чем.