Предотвращение конфликтов именAvoiding naming conflicts

При попытке создать или использовать ранее определенный идентификатор происходит конфликт имен.A naming conflict occurs when you try to create or use an identifier that was previously defined. В некоторых случаях конфликты имен вызывают такие ошибки, как обнаружено неоднозначное имя или повторяющееся объявление в текущей области.In some cases, naming conflicts generate errors such as Ambiguous name detected or Duplicate declaration in current scope. Неразрешенные конфликты имен могут стать причинами ошибок в коде и получения неверного результата, в особенности если вы не объявляете все переменные явно перед первым использованием.Naming conflicts that go undetected can result in bugs in your code that produce erroneous results, especially if you do not explicitly declare all variables before first use.

Большинства конфликтов имен можно избежать при уверенном понимании областей видимости, а также частных и общих элементов уровня модуля.You can avoid most naming conflicts by understanding the scoping, private module-level, and public module-level.

Конфликт имен возникает в тех случаях, когда идентификатор:A naming conflict can occur when an identifier:

  • видим на нескольких уровнях области видимости;Is visible at more than one scoping level.
  • имеет два разных значения на одном уровне.Has two different meanings at the same level.

Например, процедуры в отдельных модулях могут иметь одинаковые имена.For example, procedures in separate modules can have the same name. Таким образом, можно определить процедуру с MySub именем in modules Mod1 names и Mod2.Therefore, you can define a procedure named MySub in modules named Mod1 and Mod2. Если каждая процедура вызывается только из других процедур своего модуля, конфликты имен не возникают.No conflicts occur if each procedure is called only from other procedures in its own module. Однако при MySub вызове из третьего модуля может возникнуть ошибка, и для различения двух MySub процедур не предоставляется уточнение.However, an error can occur if MySub is called from a third module, and no qualification is provided to distinguish between the two MySub procedures.

Большинство конфликтов имен можно разрешить, указав перед идентификатором квалификатор, который состоит из имени модуля и, при необходимости, имени проекта.Most naming conflicts can be resolved by preceding each identifier with a qualifier that consists of the module name and, if necessary, a project name. Например:For example:

YourProject.YourModule.YourSub MyProject.MyModule.MyVar

Приведенный выше код вызывает Sub процедуру YourSub Sub и передается MyVar в качестве аргумента.The preceding code calls the Sub procedure YourSub and passes MyVar as an argument. Чтобы выделить различия между идентификаторами, можно использовать любые сочетания квалификаторов.You can use any combination of qualifiers to differentiate identical identifiers.

Visual Basic сопоставляет каждую ссылку на идентификатор с ближайшим объявлением соответствующего идентификатора.Visual Basic matches each reference to an identifier with the "closest" declaration of a matching identifier. Например, если MyID объявить общедоступный в двух модулях в проектеMod1 ( Mod2и), вы можете указать MyID объявление оператора Mod2 in без уточнения Mod2внутри, но необходимо указать его как Mod2.MyID Mod1.For example, if MyID is declared Public in two modules in a project (Mod1 and Mod2), you can specify the MyID declared in Mod2 without qualification from within Mod2, but you must qualify it as Mod2.MyID to specify it in Mod1.

Это также имеет значение true Mod2 , если в другом, но напрямую упоминаемом проекте.This is also true if Mod2 is in a different but directly referenced project. Тем не менее Mod2 , если в проекте, на который указывает ссылка, то есть проект, на который ссылается проект, ссылка на Mod2 переменную всегда MyID должна уточняться именем проекта.However, if Mod2 is in an indirectly referenced project, that is, a project referenced by the project you directly reference, references to the Mod2 variable named MyID must always be qualified with the project name. Если вы ссылаетесь MyID на третий, прямой ссылочный модуль, то выполняется первое объявление, обнаруженное при поиске:If you reference MyID from a third, directly referenced module, the match is made with the first declaration encountered by searching:

  • Напрямую упоминаемые проекты в том порядке, в котором они отображаются в диалоговом окне " ссылки " меню " Сервис ".Directly referenced projects, in the order that they appear in the References dialog box of the Tools menu.
  • Модули каждого проекта.The modules of each project. Обратите внимание, что строгий порядок модулей в проекте отсутствует.Note that there is no inherent order to the modules in the project.

Использовать имена объектов ведущего приложения, например, R1C1 в Microsoft Excel, на других уровнях области видимости нельзя.You can't reuse names of host-application objects, for example, R1C1 in Microsoft Excel, at different scoping levels.

Совет

Типичные ошибки, связанные с конфликтом имен: неоднозначные имена, повторяющиеся объявления, необъявленные идентификаторы или ненайденные процедуры.Typical errors caused by naming conflicts include ambiguous names, duplicate declarations, undeclared identifiers, and procedures that are not found. После запуска каждого модуля с помощью оператора Option Explicit для принудительного явного объявления переменных перед их использованием можно избежать некоторых потенциальных конфликтов имен и ошибок, связанных с идентификатором.By beginning each module with an Option Explicit statement to force explicit declarations of variables before they are used, you can avoid some potential naming conflicts and identifier-related bugs.

См. такжеSee also

Поддержка и обратная связьSupport and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.