Что на самом деле делает ключевое слово Set в VBA?

136

Надеюсь, это простой вопрос, но мне бы очень понравился технический ответ на этот вопрос.

Какая разница между:

i = 4

и

Set i = 4

в VBA? Я знаю, что последнее вызовет ошибку, но я не совсем понимаю, почему.

Теги:
variable-assignment

7 ответов

85
Лучший ответ

set используется для назначения ссылки на объект. С-эквивалент был бы

 int i;
int* ref_i;

i = 4; // Assigning a value (in VBA: i = 4)
ref_i = &i; //assigning a reference (in VBA: set ref_i = i)
  • 4
    Ссылка на объект VB не совсем совпадает с указателем на C. И нет эквивалента «& я» в VB.
  • 9
    Нет, точно так же, нет. Но достаточно близко для меня, чтобы понять концепцию.
Показать ещё 1 комментарий
71

В вашем случае это приведет к ошибке.: -)

Set назначает ссылку на объект. Для всех других назначений оператор (неявный, необязательный и малоиспользуемый) Let верен:

Set object = New SomeObject
Set object = FunctionReturningAnObjectRef(SomeArgument)

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)
39

От MSDN:

Установить ключевое слово: В VBA ключевое слово Set необходимо различать присвоение объекта и присвоение свойства по умолчанию объекта. Поскольку свойства по умолчанию не являются поддерживается в Visual Basic.NET, Установить ключевое слово не нужно и нет. дольше поддерживаются.

  • 0
    Хорошо найдено, но ссылка на статью, которую вы нашли на MSDN, была бы еще лучше :)
  • 1
    @Neil - ссылка есть, если вы нажмете MSDN в моем сообщении.
Показать ещё 4 комментария
9

Set используется для установки ссылок на объекты, а не для назначения значения.

1

В верхней части моей головы Set используется для назначения COM-объектов переменным. Выполняя набор, я подозреваю, что под капотом он выполняет вызов AddRef() объекта для управления его жизнью.

  • 1
    Он используется не только для объектов COM, но и для всех объектов. Основная причина использования SET объясняется Galwegian.
0

Поэтому, когда вы хотите установить значение, вам не нужно "Установить"; в противном случае, если вы имеете в виду объект, например. рабочий лист/диапазон и т.д., вам нужно использовать "Установить".

-1

Установите ключевое слово и используется для назначения ссылки на объект в VBA.

Например, * Ниже пример показывает, как использовать Set в VBA.

Dim WS As Worksheet

Установить WS = ActiveWorkbook.Worksheets( "Sheet1" )

WS.Name = "Amit"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню