ฉันมีตัวแปรส่วนกลางที่เป็นอินสแตนซ์ของคลาสที่ฉันกำหนดเอง
ฉันจะตรวจสอบได้อย่างไรว่าออบเจ็กต์ถูกตั้งค่าหรือว่าฉันต้องการเริ่มต้นหรือไม่
ฉันมีตัวแปรส่วนกลางที่เป็นอินสแตนซ์ของคลาสที่ฉันกำหนดเอง
ฉันจะตรวจสอบได้อย่างไรว่าออบเจ็กต์ถูกตั้งค่าหรือว่าฉันต้องการเริ่มต้นหรือไม่
คำตอบ:
If obj Is Nothing Then
' need to initialize obj: '
Set obj = ...
Else
' obj already set / initialized. '
End If
หรือหากคุณต้องการวิธีอื่น:
If Not obj Is Nothing Then
' obj already set / initialized. '
Else
' need to initialize obj: '
Set obj = ...
End If
obj Is Nothing
ไม่เหมือนกับการตรวจสอบIsNothing(obj)
! ขอบคุณสำหรับไวยากรณ์ที่ถูกต้องในการตรวจสอบสิ่งนี้ ... ไม่แน่ใจว่าทำไมถึงIsNothing()
ทำงานแตกต่างกัน ...
Not (obj Is Nothing)
Not obj Is Nothing
สมองของฉันไม่รู้ว่า "Not obj" คืออะไร!
วิธีที่ปลอดภัย (ยกเลิก) ในการทำเช่นนี้ - หากคุณตกลงที่จะไม่ใช้ตัวเลือกที่ชัดเจน - คือ ...
Not TypeName(myObj) = "Empty"
นอกจากนี้ยังจัดการกับกรณีที่ไม่ได้ประกาศวัตถุ สิ่งนี้มีประโยชน์หากคุณต้องการแสดงความคิดเห็นในการประกาศเพื่อปิดพฤติกรรมบางอย่าง ...
Dim myObj as Object
Not TypeName(myObj) = "Empty" '/ true, the object exists - TypeName is Object
'Dim myObj as Object
Not TypeName(myObj) = "Empty" '/ false, the object has not been declared
วิธีนี้ใช้ได้ผลเนื่องจาก VBA จะสร้างอินสแตนซ์ตัวแปรที่ไม่ได้ประกาศโดยอัตโนมัติเป็นประเภทตัวแปรว่าง ช่วยลดความจำเป็นในการใช้บูลีนเสริมเพื่อจัดการพฤติกรรม
Option Explicit
โดยไม่ มันไม่ได้รับอะไรเลยนอกจากปัญหา หากต้องการ "เปลี่ยน" ลักษณะการทำงานให้ใช้การคอมไพล์ตามเงื่อนไข