Rubberduck VBA: Что может вызвать ошибку решателя? - PullRequest
0 голосов
/ 29 августа 2018

Спасибо за этот вопрос: Подменю Rubberduck UI отключены , я знаю, что мне может потребоваться нажать кнопку "Обновить", чтобы использовать RubberduckVBA .

Одной из возможных ошибок является, по-видимому, «Ошибка решателя».

enter image description here

В каких случаях может возникать такая ошибка распознавания?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

По крайней мере один из следующих случаев:

Функция или Sub не компилируются, и разработчик не знает об этом при запуске проекта VBA, потому что Sub никогда не вызывается.

Решение:

Этот «мусорный» код можно обнаружить в Журналах уровня трассировки Rubberduck.

Например, в моем случае:

Sub CleanSheetOut()
Worksheets(sheetOut).Range("A1:XFD10485576").Clear
Worksheets(sheetOut).Range("A1:XFD10485576").Interior
        .Pattern = xlNone
       .TintAndShade = 0
     .PatternTintAndShade = 0
End Sub

... было неверно (не компилировалось), но никогда не вызывалось, поэтому проект работал нормально, но Rubberduck не смог решить.

Правильный код:

Sub CleanSheetOut()
   Worksheets(sheetOut).Range("A1:XFD10485576").Clear
   With Worksheets(sheetOut).Range("A1:XFD10485576").Interior
      .Pattern = xlNone
      .TintAndShade = 0
      .PatternTintAndShade = 0
   End With
End Sub

... компилирует и позволяет Rubberduck нормально анализировать и разрешать.

Журналы: enter image description here ... показал неисправный Sub и в каком модуле я смог его найти.

Взгляд от команды разработчиков Rubberduck:

Будет ли VBE компилироваться на лету, зависит от настроек компиляции в в правом нижнем углу вкладки «Редактор» меню «Сервис-> Параметры».

На самом деле мы пытаемся скомпилировать проект и предупредить пользователя, что Проект не компилируется. Тем не менее, вышеупомянутые настройки VBE могут мешать этому. Кроме того, компиляция перед обновлением может быть деактивирован в собственных настройках Rubberduck.

См. Github thread для более подробной информации.

0 голосов
/ 29 августа 2018

TL; DR: Rubberduck уже вышел на новый "официальный" релиз!

Отказ от ответственности: я управляю и участвую в проекте Rubberduck OSS.

Исключение было сгенерировано при обходе деревьев разбора. Трудно сказать, что именно произошло, потому что разбор + разрешение кода VBA - это очень сложный, многоэтапный процесс .

Чтобы выяснить, что конкретно пошло не так, вам нужно просмотреть журналы - ведение журнала отключено по умолчанию (оно довольно многословно), вам нужно включить его через диалог settings :

Rubberduck settings dialog

Установите минимальный уровень журнала на Трассировка для полной информации обо всем, что делает анализатор / распознаватель, или Ошибка для менее подробного журнала, который включает только информацию об исключении; затем вы можете опубликовать этот журнал (или его части) в новом выпуске , и разработчики проекта незамедлительно пометят / пометят его соответствующим образом, изучат данные журнала / исключения и определят, была ли проблема устранена в более поздняя предварительная сборка, или если это новая ошибка, которую необходимо исправить.

Поскольку практически каждая функция требует точного понимания кода в VBE, разработчики Rubberduck очень серьезно относятся к проблемам синтаксического анализа / распознавания.

Если вы используете последнюю «зеленую» версию (v2.2.0), я почти уверен, что проблема была исправлена ​​с тех пор. Последняя «предварительная» сборка имеет досадные проблемы с функцией autocompletion (определенно будет исправлена ​​в v2.3.0), но распознаватель работает очень хорошо:)

...