การเรียกใช้ VBA จาก Form อื่นทำอย่างไรครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,306   6
URL.หัวข้อ / URL
การเรียกใช้ VBA จาก Form อื่นทำอย่างไรครับ

ผมสร้าง VBA ไว้ควบคุมการทำงานของ Form1           ต่อมาผมสร้าง Form2 ผมสร้าง VBA จะต้องเขียนอย่างไรที่เรียกใช้ VBA ของ Form1 ที่ทำไว้แล้ว และหาก Form1 ยังไม่ได้ load ไว้มันจะทำงานไหมครับ

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

1 @R22371
ทำไมไม่เขียนโค้ดที่ต้องใช้ร้วมกันเก็บไว้ที่ Module หล่ะครับ แต่ละฟอร์มก็เรียกใช้โค้ดนี้ได้ ซึ่งอาจจะเป็นวิธีการที่เหมาะสมกว่า
2 @R22373
เจ๊ขี้เหร่ มาแล้วจ้า
จัดไปเรนเน้นๆคุณน้องขา

สร้างฟอร์ม 1 ตามจินตนาการคุณน้องเลยค่ะ
ขั้นต่อไป สร้างฟอร์ม 2 ตามความอยากหนูเลยนะคะ

ต่อไปคุณน้องก็เอา object ฟอร์ม1 ใส่เข้าไปในโมดูลฟอร์ม2
เอ๊ะใส่ยังไงหว่า ตามนี้เลยค่ะ
Private frm1 As Form1
อุ๊ยง่ายจัง
แต่ว่า object frm1 ยังใช้งานไม่ได้นะคะ ต้อง initializebก่อนค่ะ
บนเหตุการณ์ onload ของฟอร์ม2
Set frm1 = new Form1

หลังจากนั้นอยากให้ object frm1 ทำอะไรก็ตามใจคุณน้องเลยค๊า
เช่น frm1.text1 = 5
ทั้งนี้ต้องมีคอนโทรล text1 อยู่ใน frm1 หรือฟอร์ม1
บางทีเราก็จะสร้าง property get/let มาควบคุมการทำงานอีกที
เพื่อเข้าถึงคอนโทรลเหล่านั้น(มีรายละ้อียดเพิ่มเติม) เมื่อยพิมพ์ แค่นี้ก่อนนะคะ ประเดี๋ยวท่านสันติสุขคงเข้ามาเสริมให้

3 @R22378
เรียน คุณสันติสุข จริงๆแล้ว vba ของ form1 ก็คือ event ของ form1 นั่นเองจึงมีความจำเพาะกับ form1เท่านั้น               ส่วน form2 เมื่อมีการป้อนข้อมูล บ้างครั้งข้อมูลนั้นเกี่ยวพันไปถึง form1 จึงอยากให้ form1 คำนวน พร้อมแสดงผลใหม่ (แสดงผลใหม่อย่างเดียวไม่ได้)   เมื่อต้องคำนวนใหม่ จึงเป็นที่มาของคำถามนี้แหละครับ (จริงๆ แล้ว การคำนวนมีเพียง 5 บรรทัดเท่านั้นเอง แต่ผมคิดว่า การ call ไปที่ vba ที่ form1 นั้น พร้อมสั่งให้ form1 แสดงผลใหม่ง่ายกว่า และไม่ผูกติด หากวันหลัง form1 จะมีการเปลี่ยนแปลงการคำนวน)
4 @R22382
สมมุติในฟอร์ม 1 มีปุ่ม command1 แล้วมีโค้ด

Private Sub Command1_Click()
   ...
   ...
End Sub

ก็ให้เปลี่ยนจากคำว่า Private เป็น Public

และสมมุติว่าในฟอร์ม 2 มีปุ่ม command2 ซึ่งต้องการสั่งให้เหมือนว่าปุ่ม command1 ถูกคลิก ก็จะมีโค้ดเป็น

Private Sub Command2_Click()
    If CurrentProject.AllForms("form1").IsLoaded Then
        Form_Form1.Command1_Click
    End If
End Sub

จะสังเกตุเห็นว่า เราจะต้องเติมคำว่า Form_ ไปที่หน้าชื่อฟอร์ม 1 ด้วยนะครับ

หรือจะเขียนเป็นแบบนี้ก็ได้ Forms!Form1.Command1_Click

หรือถ้าจะทำให้มันดูเป็นทางการตามแบบฉบับ object oriented ก็สามารถสร้างออกมาให้เห็นโท่งๆด้วยตัวเราเองเป็น
Public Property Get/Let/Set .... ตามที่เจ๊ U&ME บอกก็ได้ครับ
5 @R22383
ดึกแล้วยังไม่นอนนะคะ
ไม่รู้ว้าคนตั้งคำถามนำวิธีการใช้แล้วหรือยัง
และก็ไม่อาจทราบได้ว่าได้ผลประการใด
เศร้าจัง!!!
6 @R22384
ขอบคุณทั้งสองท่านครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2623s