กระทู้เก่าบอร์ด อ.Yeadram
3,241 3
URL.หัวข้อ /
URL
การสร้างปุ่มเพื่อ Run module
ในหน้า Form ต้องการให้ Run module ต้องตั้งค่าอย่างไรครับ
3 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R08801
docmd.runcode [ชื่อฟังก์ชั่นในโมดูล][, อาร์กิวเมนต์ของฟังก์ชั่้น (ถ้ามี)]
2 @R08810
ขอวิธีทำโดยละเอียดด้วยครับ
ขอบคุณครับ
ขอบคุณครับ
3 @R08812
Module เป็น ออปเจคชนิดหนึ่ง มันไม่สามารถรันได้
คุณสื่อความหมายอะไรผิดไปหรือเปล่า
เหมือน table คุณจะดูข้อมูล เราเรียกว่า "เปิดตาราง"
ถ้าฟอร์มหรือรายงาน เราอาจเรียกได้ว่า "รัน"
คิวรี่เราก็อาจเรียกได้เช่นกันว่า "รัน"
แต่โมดูล มันคือออบเจคที่ใช้วางโค้ด ใน 1 โมดูลสามารถวางโปรแกรมย่อย หรือฟังก์ชั่นได้หลายตัว หลายอย่าง แต่ละตัวแต่ละอย่างสามารถทำงานได้อิสระจากกัน
ต่อให้ใน 1 โมดูล มีฟังก์ชั่น 10ตัว มี โปรแกรมย่อย (Procedure) อีกเป็น 10 ตัว มันก็ไม่จำเป็นที่จะต้องทำงานพร้อมกันทั้ง 20 ตัวนะครับ มันจะทำงานเฉพาะฟังก์ชั่น หรือเฉพาะโปรแกรมย่อยที่ถูกเรียกชื่อเท่านั้น
คุณจะรันโมดูล ผมก็เลยไม่เข้าใจว่า คุณจะรันมันยังไง
ผมเดาเอาว่าคงหมายถึงเขียนฟังก์ชั่นเอาไว้ข้างใน แล้วจะเรียกใช้ฟังก์ชั่นนั้นๆ
ผมก็เลยให้คำสั่งนั้นไป
----------------------------
อนึ่ง โมดูล ในโปรแกรม Access ยังแบ่งได้เป็นอีกสองชนิด
1) โมดูลที่ฝังในออบเจคอื่นๆ เช่น โมดูลประจำฟอร์ม, โมดูลประจำรายงานเป็นต้น คือแต่ละฟอร์มมันจะสร้างโมดูลของมันเอง เมื่อมีความจำเป็นต้องเขียนโค้ด โดยมันจะสร้างและเซฟด้วยชื่อฟอร์มนั้นๆ เพื่อให้จดจำง่าย ค้นหาง่าย
รายงานก็เช่นกัน เมื่อมีความจำเป็นต้องเขียนโค้ดฝังในรายงาน ระบบมันจะสร้างของมันขึ้นมาเอง เซฟให้อัตโนมัติด้วยชื่อของรายงานนั้นๆ โดยปรกติโค้ดใดๆ ฟังก์ชั่นใดๆ โปรแกรมย่อยใดๆ ตัวแปรใดๆ ที่เขียนไว้ในโมดูลเหล่านี้ มักจะทำงานได้ภายในขอบเขตของมันเท่านั้น ถ้าเป็นของฟอร์ม มันก็จะมีสิทธิ์ทำงานได้ก็ต่อเมื่อฟอร์มนั้นเปิดอยู่ รันอยู่ ผลกระทบหรือปฎิกิริยาใดๆ ที่เป็นผลจากโปรแกรมย่อยเหล่านั้น จะส่งผลกับฟอร์มของมันเท่านั้น จะไม่ไปยุ่งกับออบเจคอื่นๆ เลย (แต่มันก็มีข้อยกเว้น สามารถทำงานข้ามกันได้ ด้วยคำว่า Public ... )
2) คือโมดูลที่เราสร้างเอง เราต้องตั้งชื่อเอง ตามหลักการตั้งชื่อทุกประการ แต่เราจะไม่นำชื่อนี้ ไปสั่งรันอะไรเลย โปรแกรมย่อยหรือฟังก์ชั่นที่เขียนไว้ภายในนี้ แต่ละอย่างก็ต้องมีชื่อของมันเอง ตามหลักการตั้งชื่อ จะตั้งเป็นชื่อเดียวกันกับชื่อโมดูล ไม่ได้ ชื่อเหล่านี้แหละครับ ชื่อฟังก์ชั่นหรือชื่อโปรแกรมย่อยพวกนี้แหละครับที่เราจะนำไปอ้าง นำไปใช้ร่วมกับคำสั่งอื่นๆ
สมมติคุณมีโมดูลชื่อ Module1 ข้างในมี 2 ฟังก์ชั่นชื่อ myCalCulate และชื่อ myRunTime
เวลาคุณจะเรียกใช้ คุณต้องเรียก
call myCalculate หรือ call myRunTime
คุณจะเรียก call Module1 ไม่ได้!
หรือจะ docmd.runcode "myCalculate" ก็ได้
แต่จะเรียก docmd.runcode "Module1" มันไม่ได้!
---------------------------------
ผมคิดว่าคุณสื่อความหมาย หรือสื่อความต้องการของคุณผิด ว่าคุณต้องการจะทำอะไรกันแน่ คุณบอกมาไม่ตรง คนอ่านสับสนเลยไม่รู้คุณจะทำอะไร
-----------------------------------
หรือว่าคุณต้องการเขียนโค้ดในฟอร์ม
-เปิดฟอร์มในมุมมองออกแบบ
-เปิด Dialog Properties ของฟอร์ม เลื่อนไปดูที่แท็บ Event
-เห็นรายการหลายรายการนั้นๆ นั่นคือ เหตุการณ์ที่คุณสามารถเลือกได้ ว่าต้องการให้โค้ดของ เริ่มทำงานในตอนไหน เลือกเอาเลยครับ ตามใจชอบ (ข้อจำกัดแต่ละเหตุการณ์ก็ค่อยศึกษากันต่อไป)
-เมื่อเลือกได้แล้ว อยากฝังโค้ดในเหตุการณ์นั้น ก็เลือกตัวเลือกให้เป็น [Event Procedure] แปลเป็นไทยได้ว่า "โปรแกรมย่อยเฉพาะเหตุการณ์"
เลือกเสร็จก็คลิ๊กตรงปุ่ม ... ข้างหลัง แล้วระบบของ Access จะสร้างโมดูลประจำฟอร์มมาให้เอง พร้อมตั้งชือโมดูลให้ด้วย ยัง! ยังไม่พอ
ระบบยังช่วยให้คุณเขียนหัวโปรแกรมย่อย ตั้งชื่อสื่อความหมายได้อย่างชัดเจน ไว้ให้แล้ว 1 บรรทัด
และเขียนจุดจบของโปรแกรมย่อยให้ด้วย อีก 1 บรรทัด ( End Sub )
คุณก็แค่ ใส่โค้ดเข้าไปในระหว่างนั้น
นั่นคือการเขียนโค้ดฝังเหตุการณ์
แล้วมันจะรันตอนไหนล่ะ ไอ้โค้ดที่ว่าเนี่ย???
มันก็จะทำงานอัตโนมัติ เมื่อเหตุการณ์นั้นๆ เกิดขึ้นไงครับ ไม่ต้องสั่งรันมันเลย
คุณสื่อความหมายอะไรผิดไปหรือเปล่า
เหมือน table คุณจะดูข้อมูล เราเรียกว่า "เปิดตาราง"
ถ้าฟอร์มหรือรายงาน เราอาจเรียกได้ว่า "รัน"
คิวรี่เราก็อาจเรียกได้เช่นกันว่า "รัน"
แต่โมดูล มันคือออบเจคที่ใช้วางโค้ด ใน 1 โมดูลสามารถวางโปรแกรมย่อย หรือฟังก์ชั่นได้หลายตัว หลายอย่าง แต่ละตัวแต่ละอย่างสามารถทำงานได้อิสระจากกัน
ต่อให้ใน 1 โมดูล มีฟังก์ชั่น 10ตัว มี โปรแกรมย่อย (Procedure) อีกเป็น 10 ตัว มันก็ไม่จำเป็นที่จะต้องทำงานพร้อมกันทั้ง 20 ตัวนะครับ มันจะทำงานเฉพาะฟังก์ชั่น หรือเฉพาะโปรแกรมย่อยที่ถูกเรียกชื่อเท่านั้น
คุณจะรันโมดูล ผมก็เลยไม่เข้าใจว่า คุณจะรันมันยังไง
ผมเดาเอาว่าคงหมายถึงเขียนฟังก์ชั่นเอาไว้ข้างใน แล้วจะเรียกใช้ฟังก์ชั่นนั้นๆ
ผมก็เลยให้คำสั่งนั้นไป
----------------------------
อนึ่ง โมดูล ในโปรแกรม Access ยังแบ่งได้เป็นอีกสองชนิด
1) โมดูลที่ฝังในออบเจคอื่นๆ เช่น โมดูลประจำฟอร์ม, โมดูลประจำรายงานเป็นต้น คือแต่ละฟอร์มมันจะสร้างโมดูลของมันเอง เมื่อมีความจำเป็นต้องเขียนโค้ด โดยมันจะสร้างและเซฟด้วยชื่อฟอร์มนั้นๆ เพื่อให้จดจำง่าย ค้นหาง่าย
รายงานก็เช่นกัน เมื่อมีความจำเป็นต้องเขียนโค้ดฝังในรายงาน ระบบมันจะสร้างของมันขึ้นมาเอง เซฟให้อัตโนมัติด้วยชื่อของรายงานนั้นๆ โดยปรกติโค้ดใดๆ ฟังก์ชั่นใดๆ โปรแกรมย่อยใดๆ ตัวแปรใดๆ ที่เขียนไว้ในโมดูลเหล่านี้ มักจะทำงานได้ภายในขอบเขตของมันเท่านั้น ถ้าเป็นของฟอร์ม มันก็จะมีสิทธิ์ทำงานได้ก็ต่อเมื่อฟอร์มนั้นเปิดอยู่ รันอยู่ ผลกระทบหรือปฎิกิริยาใดๆ ที่เป็นผลจากโปรแกรมย่อยเหล่านั้น จะส่งผลกับฟอร์มของมันเท่านั้น จะไม่ไปยุ่งกับออบเจคอื่นๆ เลย (แต่มันก็มีข้อยกเว้น สามารถทำงานข้ามกันได้ ด้วยคำว่า Public ... )
2) คือโมดูลที่เราสร้างเอง เราต้องตั้งชื่อเอง ตามหลักการตั้งชื่อทุกประการ แต่เราจะไม่นำชื่อนี้ ไปสั่งรันอะไรเลย โปรแกรมย่อยหรือฟังก์ชั่นที่เขียนไว้ภายในนี้ แต่ละอย่างก็ต้องมีชื่อของมันเอง ตามหลักการตั้งชื่อ จะตั้งเป็นชื่อเดียวกันกับชื่อโมดูล ไม่ได้ ชื่อเหล่านี้แหละครับ ชื่อฟังก์ชั่นหรือชื่อโปรแกรมย่อยพวกนี้แหละครับที่เราจะนำไปอ้าง นำไปใช้ร่วมกับคำสั่งอื่นๆ
สมมติคุณมีโมดูลชื่อ Module1 ข้างในมี 2 ฟังก์ชั่นชื่อ myCalCulate และชื่อ myRunTime
เวลาคุณจะเรียกใช้ คุณต้องเรียก
call myCalculate หรือ call myRunTime
คุณจะเรียก call Module1 ไม่ได้!
หรือจะ docmd.runcode "myCalculate" ก็ได้
แต่จะเรียก docmd.runcode "Module1" มันไม่ได้!
---------------------------------
ผมคิดว่าคุณสื่อความหมาย หรือสื่อความต้องการของคุณผิด ว่าคุณต้องการจะทำอะไรกันแน่ คุณบอกมาไม่ตรง คนอ่านสับสนเลยไม่รู้คุณจะทำอะไร
-----------------------------------
หรือว่าคุณต้องการเขียนโค้ดในฟอร์ม
-เปิดฟอร์มในมุมมองออกแบบ
-เปิด Dialog Properties ของฟอร์ม เลื่อนไปดูที่แท็บ Event
-เห็นรายการหลายรายการนั้นๆ นั่นคือ เหตุการณ์ที่คุณสามารถเลือกได้ ว่าต้องการให้โค้ดของ เริ่มทำงานในตอนไหน เลือกเอาเลยครับ ตามใจชอบ (ข้อจำกัดแต่ละเหตุการณ์ก็ค่อยศึกษากันต่อไป)
-เมื่อเลือกได้แล้ว อยากฝังโค้ดในเหตุการณ์นั้น ก็เลือกตัวเลือกให้เป็น [Event Procedure] แปลเป็นไทยได้ว่า "โปรแกรมย่อยเฉพาะเหตุการณ์"
เลือกเสร็จก็คลิ๊กตรงปุ่ม ... ข้างหลัง แล้วระบบของ Access จะสร้างโมดูลประจำฟอร์มมาให้เอง พร้อมตั้งชือโมดูลให้ด้วย ยัง! ยังไม่พอ
ระบบยังช่วยให้คุณเขียนหัวโปรแกรมย่อย ตั้งชื่อสื่อความหมายได้อย่างชัดเจน ไว้ให้แล้ว 1 บรรทัด
และเขียนจุดจบของโปรแกรมย่อยให้ด้วย อีก 1 บรรทัด ( End Sub )
คุณก็แค่ ใส่โค้ดเข้าไปในระหว่างนั้น
นั่นคือการเขียนโค้ดฝังเหตุการณ์
แล้วมันจะรันตอนไหนล่ะ ไอ้โค้ดที่ว่าเนี่ย???
มันก็จะทำงานอัตโนมัติ เมื่อเหตุการณ์นั้นๆ เกิดขึ้นไงครับ ไม่ต้องสั่งรันมันเลย
Time: 0.4347s