Я абсолютно не знаю, как начать диагностировать это, и просто подумал, есть ли у кого-нибудь какие-либо предложения. Я генерирую электронную таблицу Excel, вызывая некоторые макросы из приложения C #, и в процессе генерации она как-то ломается. У меня есть класс VBA, содержащий всю мою логику регистрации / обработки ошибок, которую я создаю с помощью метода доступа singleton-esque, показанного здесь:
Private mcAppFramework As csys_ApplicationFramework
Public Function AppFramework() As csys_ApplicationFramework
If mcAppFramework Is Nothing Then
Set mcAppFramework = New csys_ApplicationFramework
Call mcAppFramework.bInitialise
End If
Set AppFramework = mcAppFramework
End Function
Приведенный выше код отлично работает до того, как я сгенерировал электронную таблицу, но впоследствии не работает. Кажется, проблема в следующей строке:
Set mcAppFramework = New csys_ApplicationFramework
, которого я никогда раньше не видел. Если я добавлю часы в назначаемую здесь переменную, тип отобразится как csys_ApplicationFramework / wksFoo, где wksFoo - это случайный лист в той же книге. Кажется, что происходит то, что, хотя переменная имеет правильный тип, а не заполняет этот слот новым экземпляром моего каркасного класса, она вместо этого указывает на существующий рабочий лист, эквивалентный
Set mcAppFramework = wksFoo
, что является ошибкой компилятора, как и следовало ожидать. Еще более странно, если я поставлю точку останова на ошибочной строке, отредактирую строку и затем продолжу выполнение, это сработает. Например, я удаляю слово «Новый», удаляю строку, возвращаюсь, повторно набираю «Новый» и возобновляю выполнение. Это как-то «исправляет» рабочую книгу, и она работает долго и счастливо, с типом переменной в моем окне просмотра, показанной как csys_ApplicationFramework / csys_ApplicationFramework, как и следовало ожидать.
Это означает, что манипулирование книгой через PIA каким-то образом временно нарушает ее. Все, что я делаю в PIA - это открываю книгу, вызываю несколько макросов с помощью Excel.Application.Run () и снова сохраняю ее. Я могу опубликовать еще несколько деталей, если кто-то считает, что это актуально.
Я не знаю, как VBA создает объекты за кулисами или как их отлаживать. Я также не знаю, как способ выполнения кода может измениться без изменения самого кода.
Как уже упоминалось, VBA, откровенно говоря, немного пошутил по мне ... Есть мысли?