หวังว่าเป็นคำถามง่าย ๆ แต่ฉันอยากได้คำตอบทางเทคนิคกับสิ่งนี้!
ความแตกต่างระหว่าง:
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"