Симптомы
Это особый симптом при компиляции проекта Excel VBA. Произошла следующая ошибка:
User-defined type not defined
Однако код, создающий эту ошибку, не выделяется компилятором и поэтому я не могу определить проблему.
Что я уже знаю и пробовал
Это ошибка "Определенная пользователем типа", которую я видел раньше с помощью простых проблем, таких как присвоение имени As Strig
вместо As String
. Однако эта конкретная ошибка появляется только во время пункта меню Debug > Compile VBAProject
, и когда появляется окно с сообщением об ошибке, оно не выделяет строку кода, в которой происходит ошибка.
После многих исследований я обнаружил, что эта ошибка может быть связана с отсутствующими ссылками, и я решил это, поскольку я включил все необходимые ссылки и объекты Toolbox.
Чтобы убедиться, что я не пропустил никаких очевидных отсутствующих операторов Dim
, я добавил Option Explicit
ко всем страницам кода (включая формы), чтобы убедиться, что ничего не пропало. Ошибка при показе компиляции.
Существует также эта известная ошибка, в которой говорится, что проблема, как известно, произошла из-за проектов VB6 с использованием двоичной совместимости:
Отключите двоичную совместимость и скомпилируйте проект. Visual Basic выделит строку кода, которая содержит определяемый пользователем тип это не определено. После решения проблемы совместимость с двоичными файлами можно снова включить.
Я нашел эту статью через этот вопрос и ответ, однако я не могу найти эту опцию в стандартном редакторе Excel VBA.
Помогите спасти мое и чужое здравомыслие!
Я знаю из поиска Google и других вопросов, что я не единственный, у кого была эта проблема.
Я попытался выполнить код вручную, но есть просто слишком много строк, чтобы это сделать.
Есть ли способ отключить двоичную совместимость в проектах Excel VBA? Как люди находят эту оскорбительную строку кода, если они не могут отлаживать то, что им нужно изменить? Любая помощь будет прекрасна!
Спасибо заранее.
Изменить: Я нашел строку с нарушением кода, и поэтому моя конкретная проблема решена. Проблема все еще здесь после удаления этой конкретной строки - это был неправильный контроль имя в форме, на которую делается ссылка в этом коде. Это все еще не решает проблему, связанную с тем, как вы могли бы найти этот оскорбительный код. Можем ли мы найти хороший способ найти код нарушения, когда эта ошибка произойдет, а другие в будущем могут избежать этой агонии?