การอ้าง oBJECT FORM
กระทู้เก่าบอร์ด อ.Yeadram

 1,691   2
URL.หัวข้อ / URL
การอ้าง oBJECT FORM

ผมสงสัยว่า ถ้าผม สร้างตัวแปร Fi เป็น FORM ชื่อ EX
แล้วผม อ้างบรรทัดต่อไปว่า ให้ docmd.OPEN FORM ดังกล่าว ทำไมจึงเกิด ERROR ครับ

แต่ถ้าทดลองให้ fi เป็น string เช่น
Dim fi As string
fi="ex"      มันทำงานได้   แสดงว่ามีอะไรที่ผมเข้าใจไม่ถ่องแท้ รบกวนท่านผู้รู้อธิบายด้วยครับ
(ความตั้งใจจะเขียน ตัวแปรแทนชื่อ FORM เพราะมีการอ้างชื่อ FORM หลายครั้ง
และมีการโดด เข้าออก ระหว่าง FORM 2-3 ที่เป็น SUBFORM กัน และมีบางบันทัดคำสั่งที่
ใช้ตัวแปร String แทน ก็ไม่ได้ผล เช่น[Forms]!fi.[text31] จึงพยายามอ้างเป็น OBJECT FORM เลยนะครับ) ขอเป็นหลักการการอ้างก็ได้ครับ ขอบคุณครับ

ตัวอย่าง CODE ที่ ERROR
Dim fi As Form_EX
Private Sub ADD_Click() ' ADD call POSITION ไว้
     Call RecordPosition
     DoCmd.OpenForm Fi, acNormal, "", "", acAdd, acNormal

'ถ้า fi เป็น string มันทำงานได้ ถ้าเป็น fi เป็น Form_EX มัน ERROR

End Sub

2 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R00703
ประเด็นมันอยู่ที่ว่า .OpenForm นั้น เขาต้องการ argument เป็นข้อมูลประเภท String ครับ ไม่ได้ต้องการข้อมูลเป็น Form Object ก็เท่านั้นเอง

ส่วนวิธีการอ้างฟอร์มที่มีชื่อเก็บไว้เป็นตัวแปร String ก็คือ
Forms(fi)

หรือจะอ้างจาก String โดยตรงก็คือ
Forms("EX")

หรืออ้างจาก Object Name โดยตรงก็คือ
Forms!EX
Forms![EX]

รูปแบบที่ว่านี้ไม่ได้ใช้เฉพาะกับฟอร์มเท่านั้น แต่กับ Access Object อื่นๆ (Report, Query, Field, Control, ... ) ก็เช่นเดียวกัน ซึ่งอธิบายเป็นรูปแบบทั่วไปได้ว่า

ObjectCollection(String Variable)
ObjectCollection(String Constant)
ObjectCollection!Object Name
ObjectCollection![Object Name]

2 @R00704
เข้าใจแล้วครับ แบบที่อ้างด้วยวิธี
FORMS("EX") เป็นแบบที่สะดวกที่สุด ง่ายที่สุด เพราะสามารถใช้ตัวแปร
string มาต่อกันได้เลย สะดวกมากๆ

เหตุผลที่ต้องทำอย่างนี้ เพราะเมื่อออกแบบหลายๆ หลายๆ ฟอร์ม
ผมก็เลยคิดว่า ออกแบบ FORM ต้นแบบ ไว้ FORM เดียว
เมื่อจะใช้งานอื่น ก็ COPY FORM ต้นแบบมา เปลี่ยนชื่อ FORM เปลี่ยนค่าตัวแปรชื่อ FORM
เปลี่ยน DATA SOURCE ก็ใช้งานได้เลย ทำให้ไม่เสียเวลา ออกแบบ FORM ใหม่
ทั้งยังได้รูปแบบ เดียวกัน

ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2531s