Надеюсь, простой вопрос, но я бы хотел получить технический ответ на этот вопрос!
Какая разница между:
i = 4
и
Set i = 4
в VBA? Я знаю, что последний выдаст ошибку, но я не до конца понимаю, почему.
Надеюсь, простой вопрос, но я бы хотел получить технический ответ на этот вопрос!
Какая разница между:
i = 4
и
Set i = 4
в VBA? Я знаю, что последний выдаст ошибку, но я не до конца понимаю, почему.
Ответы:
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)
VBA on the left | C on the right
): Dim A, B As Range | Range A, B;
. Идти по вашей аналогии, A = B | A = B;
было бы правильно (и это было бы в C), но Set A = B | A = &B;
на самом деле правильно в VBA (и это не удалось бы в C). В VBA A = B
и Set A = B
ОБА эквивалентны С A = B;
! Различие происходит где-то еще.
В вашем случае это приведет к ошибке. :-)
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)
Из MSDN :
Ключевое слово Set: В VBA ключевое слово Set необходимо для различения назначения объекта и назначения свойства объекта по умолчанию. Поскольку свойства по умолчанию не поддерживаются в Visual Basic .NET, ключевое слово Set не требуется и больше не поддерживается.
Object variable or With block variable not set
ошибкой из VBA :)
Вдобавок ко всему, Set используется для назначения COM-объектов переменным. Делая Set, я подозреваю, что под капотом он выполняет AddRef () для объекта, чтобы управлять его временем жизни.
Set - это ключевое слово, и оно используется для назначения ссылки на объект в VBA.
Например, * Пример ниже показывает, как использовать Set в VBA.
Dim WS As Worksheet
Set WS = ActiveWorkbook.Worksheets ("Sheet1")
WS.Name = "Amit"