Когда использовать объект «я» в доступе? - PullRequest
0 голосов
/ 29 января 2019

В Access VBA мы можем использовать Me.ControlName для ссылки на имя элемента управления.Читая код VBA других людей, я понял, что некоторые люди не используют ключевое слово me, а просто используют ControlName для ссылки на имя элемента управления.

Является ли один более эффективным, чем другой?Для меня Me.ControlName более читабельно, но я не уверен, что мнение других людей.

Ответы [ 3 ]

0 голосов
/ 30 января 2019

В VB Me является внутренней ссылкой на открытый интерфейс класса.

Вещи, на которые может ссылаться Me в классе:

  • Открытые свойства, подпрограммы и функции
  • Элементы управления в форме доступа и классах отчетов

Вещи, на которые нельзя ссылаться :

  • Закрытые члены класса, включая переменные, свойства, подпрограммы и функции

Существует два варианта использования Me:

  1. Предоставление собственной ссылки при вызове функций или подпрограмм
  2. Вызов правильного метода в случае повторяющихся имен

Пример:

  • Если в стандартном модуле определено Public Foo(), а в классе Public Foo(), Me.Foo всегда будет вызывать метод класса,и обычный Foo сделает то же самое.
  • Однако, если вы удалите или переименуете метод класса Foo(), Me.Foo выдаст ошибку, , но все просто FooСсылки теперь будут вызывать глобальную Foo() функцию вместо этого!

Как программист, я, конечно, не хочу код, который волшебным образом начинает вызывать другую подпрограмму без предупреждения, если я редактирую модуль класса!

Это лучший аргумент, чтобы всегда использовать Me для ссылки на открытые члены в коде класса.

0 голосов
/ 30 января 2019

Я использую Me.ControlName только для того, чтобы убедиться, что когда я печатаю, элемент управления находится в форме, и я не пишу его неправильно.Он появится в значении intellisense, чтобы я мог подтвердить его, нажав TAB.

0 голосов
/ 29 января 2019

Есть несколько случаев, когда вам нужно использовать Me:

  1. Когда есть конфликтующие имена:

    Dim someControl As Access.Control
    Set someControl = Me.SomeControl
    

    Очевидно, этот пример надуман,но есть реальные случаи, когда конфликтующие имена логичны

  2. Когда вам нужно обратиться к самому объекту формы:

    Во внешнем модуле:

    Public Sub DoStuffWithForm(someForm As Access.Form)
        'Does stuff with form
    End Sub
    

    В модуле формы:

    DoStuffWithForm Me
    

Me - это просто общая концепция VBA.Все модули классов (и, соответственно, модули форм) используют ключевое слово Me для ссылки на себя, но не обязаны делать это для ссылки на публичные свойства.Это похоже на использование Application.Something, вам также не нужно этого делать, но это повышает ясность, когда вы это делаете.И только в определенных (редких) случаях это требуется.

...