Автоматизация Excel с помощью PIA делает VBA шатким - PullRequest
1 голос
/ 20 апреля 2010

Я абсолютно не знаю, как начать диагностировать это, и просто подумал, есть ли у кого-нибудь какие-либо предложения. Я генерирую электронную таблицу 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, откровенно говоря, немного пошутил по мне ... Есть мысли?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2010

Я бы предположил, что каким-то образом PIA работают неправильно. Я бы порекомендовал отменить их регистрацию, удалить все экземпляры с вашего компьютера и затем восстановить их.

Конечно, это не рациональное объяснение, которое я хотел бы дать, но иногда кажется, что COM просто не хочет себя вести. Я хотел бы знать, что на самом деле происходит, когда такие вещи рушатся, но единственное, что я когда-либо казался работой, это множество уколов в темноте, за которыми следует попытка найти рациональное объяснение, как только странный отказ работать случайно исчезает снова .

Извините за отсутствие «РЕАЛЬНОГО» ответа

0 голосов
/ 20 апреля 2010

Если вы посмотрите в диспетчере задач, есть ли экземпляры Excel, работающие в фоновом режиме? Просто любопытно, если он создает объект Excel и не удаляет его должным образом.

...