Сподіваюся, просте запитання, але я дуже хотів би на це відповісти технічно!
Яка різниця між:
i = 4
і
Set i = 4
у VBA? Я знаю, що останній призведе до помилки, але я не повністю розумію, чому.
Сподіваюся, просте запитання, але я дуже хотів би на це відповісти технічно!
Яка різниця між:
i = 4
і
Set i = 4
у VBA? Я знаю, що останній призведе до помилки, але я не повністю розумію, чому.
Відповіді:
set
використовується для призначення посилання на об'єкт. C еквівалент був би
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;
було б правильно (і це було б в С), але Set A = B | A = &B;
насправді це правильно в VBA (і це не вдасться в С). У VBA, A = B
і Set A = B
БУТИ еквівалентні C 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 :
Встановити ключове слово : У VBA ключове слово Set необхідно розрізнити між призначенням об'єкта та призначенням властивості за замовчуванням об’єкта. Оскільки властивості за замовчуванням не підтримуються у Visual Basic .NET, ключове слово Set не потрібне і більше не підтримується.
Object variable or With block variable not set
помилкою від VBA :)
Верх моєї голови Set використовується для присвоєння об'єктам COM змінним. Роблячи набір, я підозрюю, що під кришкою він виконує AddRef () виклик об'єкта для управління його життям.
Set - це ключове слово, і воно використовується для призначення посилання на об'єкт у VBA.
Наприклад, * Нижче на прикладі показано, як використовувати Set у VBA.
Dim WS як робочий лист
Встановити WS = ActiveWorkbook.Worksheets ("Лист1")
WS.Name = "Аміт"