Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
При попытке создать или использовать ранее определенный идентификатор происходит конфликт имен. В некоторых случаях конфликты имен создают такие ошибки, как обнаружение неоднозначного имени или повторяющееся объявление в текущей области. Конфликты именования, которые не обнаружены, могут привести к ошибкам в коде, которые приводят к ошибочным результатам, особенно если перед первым использованием не объявлять все переменные явным образом.
Большинства конфликтов имен можно избежать при уверенном понимании областей видимости, а также частных и общих элементов уровня модуля.
Конфликт имен возникает в тех случаях, когда идентификатор:
- видим на нескольких уровнях области видимости;
- имеет два разных значения на одном уровне.
Например, процедуры в отдельных модулях могут иметь одинаковые имена. Таким образом, можно определить процедуру с именем MySub в модулях с именем Mod1 и Mod2. Если каждая процедура вызывается только из других процедур своего модуля, конфликты имен не возникают. Однако при вызове из третьего модуля может возникнуть MySub ошибка, и не предоставляется квалификация для различия между двумя MySub процедурами.
Большинство конфликтов имен можно разрешить, указав перед идентификатором квалификатор, который состоит из имени модуля и, при необходимости, имени проекта. Например:
YourProject.YourModule.YourSub MyProject.MyModule.MyVar
Приведенный выше код вызывает процедуру YourSubSub и передает в MyVar качестве аргумента. Используйте любое сочетание квалификаторов для различения идентичных идентификаторов.
Visual Basic сопоставляет каждую ссылку на идентификатор с ближайшим объявлением соответствующего идентификатора. Например, если MyIDобъявлен общедоступным в двух модулях в проекте (Mod1 и Mod2), можно указать MyID объявленное в Mod2 без квалификации из Mod2, но необходимо указать его, чтобы Mod2.MyID указать его в Mod1.
Это также верно, если Mod2 объект находится в другом проекте, на который ссылается напрямую. Однако если Mod2 объект находится в проекте с косвенной ссылкой, то есть в проекте, на который ссылается проект, на который вы ссылаетесь напрямую, ссылки на Mod2 переменную с именем MyID должны всегда указываться именем проекта. Если вы ссылаетесь на MyID третий модуль с прямой ссылкой, совпадение выполняется с первым объявлением, встречаемым при поиске:
- Проекты напрямую ссылаются в том порядке, в который они отображаются в диалоговом окне Ссылки меню Сервис .
- Модули каждого проекта. Обратите внимание, что строгий порядок модулей в проекте отсутствует.
Использовать имена объектов ведущего приложения, например, R1C1 в Microsoft Excel, на других уровнях области видимости нельзя.
Совет
Типичные ошибки, связанные с конфликтом имен: неоднозначные имена, повторяющиеся объявления, необъявленные идентификаторы или ненайденные процедуры. Начиная каждый модуль с оператором Option Explicit для принудительного объявления переменных перед их использованием, можно избежать некоторых потенциальных конфликтов именования и ошибок, связанных с идентификаторами.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.