หวังว่าเป็นคำถามง่าย ๆ แต่ฉันอยากได้คำตอบทางเทคนิคกับสิ่งนี้!
ความแตกต่างระหว่าง:
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;
จะถูกต้อง (และมันจะอยู่ใน C) แต่Set A = B | A = &B;
ถูกต้องจริงใน VBA (และมันจะล้มเหลวใน C) ใน 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 :
Set Keyword: ใน VBA จำเป็นต้องตั้งค่าคีย์เวิร์ดเพื่อแยกความแตกต่างระหว่างการกำหนดวัตถุและการกำหนดคุณสมบัติเริ่มต้นของวัตถุ เนื่องจากคุณสมบัติเริ่มต้นไม่ได้รับการสนับสนุนใน Visual Basic .NET จึงไม่จำเป็นต้องใช้ชุดคำหลักและไม่สนับสนุนอีกต่อไป
Object variable or With block variable not set
ข้อผิดพลาดจาก VBA :)
ชุดใช้สำหรับการตั้งค่าการอ้างอิงวัตถุซึ่งตรงข้ามกับการกำหนดค่า
ปิดส่วนหัวของฉัน Set ใช้เพื่อกำหนดวัตถุ COM ให้กับตัวแปร ด้วยการตั้งค่าฉันสงสัยว่าภายใต้ประทุนนั้นกำลังเรียกใช้ AddRef () บนวัตถุเพื่อจัดการกับอายุการใช้งาน
ดังนั้นเมื่อคุณต้องการตั้งค่าคุณไม่จำเป็นต้องมี "Set"; มิฉะนั้นถ้าคุณอ้างถึงวัตถุเช่นแผ่นงาน / ช่วง ฯลฯ คุณต้องใช้ "ชุด"
Set เป็นคีย์เวิร์ดและใช้เพื่อกำหนดการอ้างอิงไปยัง Object ใน VBA
ตัวอย่างเช่น * ตัวอย่างด้านล่างแสดงวิธีการใช้ Set ใน VBA
Dim WS เป็นแผ่นงาน
ตั้งค่า WS = ActiveWorkbook.Worksheets ("Sheet1")
WS.Name = "Amit"