กระทู้เก่าบอร์ด อ.Yeadram
2,042 8
URL.หัวข้อ /
URL
ทำไมผมสั่ง Run ไม่ได้
Private Sub Command95_Click()
Run "MsgA"
End Sub
Public Sub MsgA()
MsgBox "A"
End Sub
ผมเขียน code ตามด้านบน
พอผมคลิ๊กที่ command95 มันขึ้น debug ครับ
ทำไมมันเรียก procedure ใน form เดียวกันไม่ได้ครับ
หมายเหตุ: code ด้านบนผมเขียนใน form เดียวกัน
ผมเข้าใจว่า ถ้าย้าย Public Sub MsgA() ไปไว้ใน module มันจะ run ผ่าน
แต่ผมสงสัยว่าถ้าหากเอาไว้ใน form เดียวกันทำไมมัน run ไม่ผ่าน
ต้องเขียนการอ้างอิงอย่างไรหรือครับ ใครพอแนะนำหน่อยได้ไหมครับ
ขอบคุณครับ
8 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R02313
มีนะครับ
ถ้าผมย้าย Procedure นั้นไปไว้ที่ module กลางมันจะ run ผ่านนะครับ
ถ้าผมย้าย Procedure นั้นไปไว้ที่ module กลางมันจะ run ผ่านนะครับ
3 @R02314
Run เป็น Method ของ Application object จุดประสงค์ใช้เพื่อคุณสั่งให้ Sub/Function Procedure ที่อยู่ในอีกฐานข้อมูลหนึ่งมาทำงาน ซึ่งชื่อของ Procedure นั้นต้องตั้งอยู่ใน Module object และกำหนดเป็น Public Procedure นั่นคือสาเหตุว่าทำไมคุณย้ายไปอยู่ใน Module object แล้วมันจึงค่อยทำงานได้
เนื่องจาก Application object เป็น default object คุณจึงสามารถเขียน Run เฉยๆได้ โดยที่ไม่ต้องเขียน Application.Run ซึ่งเป็นรูปเต็มๆของมัน
แม้ว่ามันจะเรียก Procedure มาทำงานได้ แต่การเรียก Procedure โดยปกติที่อยู่ใน Project เดียวกันกับที่เราเขียนโค้ด เราใช้คำสั่ง Call ครับ
เนื่องจาก Application object เป็น default object คุณจึงสามารถเขียน Run เฉยๆได้ โดยที่ไม่ต้องเขียน Application.Run ซึ่งเป็นรูปเต็มๆของมัน
แม้ว่ามันจะเรียก Procedure มาทำงานได้ แต่การเรียก Procedure โดยปกติที่อยู่ใน Project เดียวกันกับที่เราเขียนโค้ด เราใช้คำสั่ง Call ครับ
4 @R02318
เข้าใจครับคุณสันติสุข
โดยปกติผมจะใช้
Call MsgA เพื่อ run จาก Module กลาง
แต่หาก Procedure นั้นอยู่ใน Form
ผมจะใช้ ชื่อ Form ตามด้วยชื่อ Procedure เพื่อ Run ข้าม Form
เช่น Call frmMenu.MsgA มันก็ Run ได้ครับ
เพียงแต่ว่า หากผมมี combo box ซึ่งเก็บชื่อ Procedure
ผมต้องการสร้างปุ่ม ปุ่มนึงเพื่อ run Procedure ตามชื่อที่เลือกจาก combobox
ซึ่งตอนแรกผมเขียนว่า
Sub RunButton_Click()
Run Combobox1
End Sub
มันก็ไม่มีปัญหาอะไร หาก Procedure นั้นอยู่ในส่วนที่เป็น module กลาง
แต่หากย้าย Procedure เหล่านั้นมาไว้ใน Form มันจะ run ไม่ผ่าน
ตอนแรกผมก็กะจะใช้ตรงๆเหมือนการ call ข้าม Form
Run "frmMenu.MsgA" (แต่ก็ไม่สำเร็จ)
สุดท้ายก็เลิกทำไปละคิดว่า Access มันคงไม่ยอมให้ Run Procedure ที่อยู่ใน Form
โดยปกติผมจะใช้
Call MsgA เพื่อ run จาก Module กลาง
แต่หาก Procedure นั้นอยู่ใน Form
ผมจะใช้ ชื่อ Form ตามด้วยชื่อ Procedure เพื่อ Run ข้าม Form
เช่น Call frmMenu.MsgA มันก็ Run ได้ครับ
เพียงแต่ว่า หากผมมี combo box ซึ่งเก็บชื่อ Procedure
ผมต้องการสร้างปุ่ม ปุ่มนึงเพื่อ run Procedure ตามชื่อที่เลือกจาก combobox
ซึ่งตอนแรกผมเขียนว่า
Sub RunButton_Click()
Run Combobox1
End Sub
มันก็ไม่มีปัญหาอะไร หาก Procedure นั้นอยู่ในส่วนที่เป็น module กลาง
แต่หากย้าย Procedure เหล่านั้นมาไว้ใน Form มันจะ run ไม่ผ่าน
ตอนแรกผมก็กะจะใช้ตรงๆเหมือนการ call ข้าม Form
Run "frmMenu.MsgA" (แต่ก็ไม่สำเร็จ)
สุดท้ายก็เลิกทำไปละคิดว่า Access มันคงไม่ยอมให้ Run Procedure ที่อยู่ใน Form
5 @R02319
ถ้าผมเขียน Procedure ที่เป็น public ไว้ที่ฟอร์มใดๆ
แล้วผมต้องการจะเรียกใช้มันจากฟอร์ม หรือจากโมดูลอื่นๆ
ผมจะเรียกด้วยคำสั่ง
Forms("A").B
โดยที่ A คือชื่อฟอร์มที่ Procudere นั้นฝังอยู่และขณะนั้น มันยังรันอยู่
และ B คือ Public Procedure
ไม่ทราบว่าพอจะนำไปดัดแปลงแก้ไขให้เข้ากับงานของคุณแดนได้หรือเปล่าครับ..
แล้วผมต้องการจะเรียกใช้มันจากฟอร์ม หรือจากโมดูลอื่นๆ
ผมจะเรียกด้วยคำสั่ง
Forms("A").B
โดยที่ A คือชื่อฟอร์มที่ Procudere นั้นฝังอยู่และขณะนั้น มันยังรันอยู่
และ B คือ Public Procedure
ไม่ทราบว่าพอจะนำไปดัดแปลงแก้ไขให้เข้ากับงานของคุณแดนได้หรือเปล่าครับ..
6 @R02322
ผมคิดว่าไม่มีวิธีที่จะเรียก Procedure ที่ชื่อของมันอยู่ในตัวแปร
7 @R02325
อยากทราบว่าทำไมเราไม่เขียนแบบตรงไปตรงมาอย่างนี้ มันก็น่าจะไม่แตกต่างไม่ใช่หรือครับ
Select Case Me!Combo
Case "MsgA"
Call MsgA
Case "MsgB"
Call MsgB
...
...
...
End Select
Select Case Me!Combo
Case "MsgA"
Call MsgA
Case "MsgB"
Call MsgB
...
...
...
End Select
8 @R08318
เอ้าเราติดปัญหาเดิมอีกละ... สงสัยจะไม่มีคำตอบ อาจต้องใช้วิธี select case ที่คุณสันติสุขแนะนำ
Time: 0.3387s
Call MsgA