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

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

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

i = 4

и

Set i = 4

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

Ответ 1

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)

Ответ 2

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

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)

Ответ 3

От MSDN:

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Dim WS As Worksheet

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

WS.Name = "Amit"