ทำไมผมสั่ง Run ไม่ได้
กระทู้เก่าบอร์ด อ.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

1 @R02311
ไม่มีคำสั่ง RUN ในภาษา VBA นะครับ เวลาจะเรียก Sub Procedure ให้ใช้คำสั่ง

Call MsgA
2 @R02313
มีนะครับ
ถ้าผมย้าย 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 ครับ
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
5 @R02319
ถ้าผมเขียน Procedure ที่เป็น public ไว้ที่ฟอร์มใดๆ
แล้วผมต้องการจะเรียกใช้มันจากฟอร์ม หรือจากโมดูลอื่นๆ
ผมจะเรียกด้วยคำสั่ง

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
8 @R08318
เอ้าเราติดปัญหาเดิมอีกละ... สงสัยจะไม่มีคำตอบ อาจต้องใช้วิธี select case ที่คุณสันติสุขแนะนำ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3387s