สอบถามวิธีเขียนมาโครหรือโมดูลในการทำชุดคำสั่งใว้ใช้งานครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

26 พ.ค. 63 , 15:05:29
อ่าน 559 ครั้ง

UnKnown

เนื่องด้วยผมมี Combo Box(Nboss_xx) อยู่ประมาณ 30ตัว โดยเมื่อเลือกแล้วจะดึงค่าไปแสดงผลที่ Text Box(Ne_xx) และเทียบค่าไปแสดงผลต่อที่ Text Box(WinNE_xx)
สามารถเขียนมาโครหรือโมดูลในการทำชุดคำสั่งชุดเดียวใว้ใช้งานแทนที่จะทำแยกทั้งหมด 30ชุดใหมครับ

Private Sub Nboss_01_AfterUpdate()
    Me.Ne_01 = Nboss_01.Column(4)
    Select Case Ne_01
        Case "Undead"        : Me.WinNE_01.Value = "Fire"   
        Case "Earth"      : Me.WinNE_01.Value = "Fire"   
        Case "Fire"      : Me.WinNE_01.Value = "Water"   
        Case "Water"      : Me.WinNE_01.Value = "Wind"   
        Case "Wind"      : Me.WinNE_01.Value = "Earth"   
        Case "Poison"        : Me.WinNE_01.Value = "Holy"   
        Case "Shadow"      : Me.WinNE_01.Value = "Holy"   
        Case "Holy"      : Me.WinNE_01.Value = "Shadow"   
        Case Else            : Me.WinNE_01 = ""   
    End Select
End Sub

 

26 พ.ค. 63 , 15:09:28
ตอบกลับ #1

PNR

ดูจากธาตุแล้ว นึกถึง ragnarok ขึ้นมาเลยครับ Hunter สายล่าบอส  :cool: :cool:
ลองคิดแปปครับ
แต่อาจจะต้องใส่ Nboss_01_AfterUpdate() ด้วยคำสั่ง Call กับ textbox Nboss_01 ถึง 30 นะครับ
เรียนเพื่อนสมาชิกและอาจารย์ทุกท่าน
ผมไม่ใช่อาจารย์และไม่ใช่ผู้ที่แตกฉานใน Access นะครับ
แค่ผู้หนึ่งที่แชร์ความรู้เท่าที่มี ถ้าหากอาจารย์ทุกท่านเห็นว่ายังไม่ถูกต้อง
กรุณาโพสตอบกระทู้ส่วนเนื้อหาที่น่าจะถูกต้องกว่าให้ด้วยเพื่อเป็นวิทยาทาน
 

26 พ.ค. 63 , 15:30:19
ตอบกลับ #2

UnKnown

ดูจากธาตุแล้ว นึกถึง ragnarok ขึ้นมาเลยครับ Hunter สายล่าบอส  :cool: :cool:
ถูกถูก..ถูกต้องนะครับบ :shout:

ตอนนี้ผมใช้คำสั่ง call แบบนี้อยู่ในอีกชุดคำสั่งนะครับ แต่อย่างว่ามันล่ะตัวชุดจึงต้องไล่ทำมันทุกอันเลยนะครับ=เยอะ จึงนึกถึงโมดูลอย่าง Function BahtText(ByVal sNum) แนวว่ามันเรียกใช้ให้อ่านค่าแล้วแสดงผลออกมาอีกแบบได้เลยนะครับ(นึกถึงแต่ดูแล้วแกะไม่เป็น)
โค๊ด: [Select]
Private Sub Form_Current()
    Call PicBoss
End Sub

Private Sub Nboss_01_AfterUpdate()
    Call PicBoss
End Sub
Private Sub Nboss_02_AfterUpdate()
    Call PicBoss
End Sub
.....

Public Sub PicBoss()
DoCmd.SetWarnings False

If IsNull(Me.Nboss_01) Then
    Me.PB_01.Picture = ""
    Me.PT_01.Picture = ""
'    Me.PE_01.Picture = ""
    Me.NR_01.Value = ""
Else
    Me.PB_01.Picture = CurrentProject.Path & "\Pics\" & Nboss_01.Column(5)
    Me.PT_01.Picture = CurrentProject.Path & "\Pics\" & Nboss_01.Column(2) & ".png"
'    Me.PE_01.Picture = CurrentProject.Path & "\Pics\Element\" & Nboss_01.Column(4) & ".png"
    Me.NR_01.Value = Nboss_01.Column(3)
End If
If IsNull(Me.Nboss_02) Then
    Me.PB_02.Picture = ""
    Me.PT_02.Picture = ""
    Me.PE_02.Picture = ""
    Me.NR_02.Value = ""
Else
    Me.PB_02.Picture = CurrentProject.Path & "\Pics\" & Nboss_02.Column(5)
    Me.PT_02.Picture = CurrentProject.Path & "\Pics\" & Nboss_02.Column(2) & ".png"
    Me.PE_02.Picture = CurrentProject.Path & "\Pics\Element\" & Nboss_02.Column(4) & ".png"
    Me.NR_02.Value = Nboss_02.Column(3)
End If
.....
 
DoCmd.SetWarnings True
End Sub



« แก้ไขครั้งสุดท้าย: 26 พ.ค. 63 , 15:51:33 โดย UnKnown »

 

26 พ.ค. 63 , 15:50:26
ตอบกลับ #3

PNR


ลองไปทดสอบดูนะครับ ผมใช้การจับลำดับของ combobox โดยใช้ Active Control
สาย DIY อีกแล้วนะครับอิอิ โดยใช้ Call select_case ใน Event AfterUpdate() ทุกอันนะครับ
โดยผมจะกำหนด combobox เป็น Nboss_1 แทนของเดิมคือ 01 นะครับ
ข้อดีมีโค้ดชุดเดียวมีกี่ combobox ก็ได้ครับไม่จำกัด

เช่น
Private Sub Nboss_1_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_2_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_3_AfterUpdate()
Call select_case
End Sub
Private Sub Nboss_ลำดับ N_AfterUpdate()
Call select_case
End Sub

โค๊ด: [Select]
Sub select_case()
Dim strTextName,GetString,GetNum As String

strTextName = ActiveControl.Name
GetNum = Right(strTextName, Len(strTextName) - InStrRev(strTextName, "_"))
Me("ne_" & GetNum) = Me(strTextName).Column(4)
GetString = Me(strTextName).Column(4)

Select Case GetString
        Case "Undead": Me("WinNE_" & GetNum).Value = "Fire"
        Case "Earth": Me("WinNE_" & GetNum).Value = "Fire"
        Case "Fire": Me("WinNE_" & GetNum).Value = "Water"
        Case "Water": Me("WinNE_" & GetNum).Value = "Wind"
        Case "Wind": Me("WinNE_" & GetNum).Value = "Earth"
        Case "Poison": Me("WinNE_" & GetNum).Value = "Holy"
        Case "Shadow": Me("WinNE_" & GetNum).Value = "Holy"
        Case "Holy": Me("WinNE_" & GetNum).Value = "Shadow"
       Case Else: Me("WinNE_" & GetNum).Value = ""
    End Select
 
End Sub
« แก้ไขครั้งสุดท้าย: 26 พ.ค. 63 , 16:26:30 โดย PNR »
เรียนเพื่อนสมาชิกและอาจารย์ทุกท่าน
ผมไม่ใช่อาจารย์และไม่ใช่ผู้ที่แตกฉานใน Access นะครับ
แค่ผู้หนึ่งที่แชร์ความรู้เท่าที่มี ถ้าหากอาจารย์ทุกท่านเห็นว่ายังไม่ถูกต้อง
กรุณาโพสตอบกระทู้ส่วนเนื้อหาที่น่าจะถูกต้องกว่าให้ด้วยเพื่อเป็นวิทยาทาน
 
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

29 พ.ค. 63 , 17:38:31
ตอบกลับ #4

UnKnown

ขอบคุณแนวทางจากท่าน PNR ครับผม :love:
ขอบคุณไฟล์รูป,ข้อมูล Ragnarok Online M_Eternal Love จาก https://www.romcodex.com/ link :cool:

รูป   | ธาตุ | แพ้ธาตุ
ชื่อ  | เผ่า , ขนาด


ไฟล์ตัวอย่างใว้ศึกษาวิธีการทำ Call select_case (อ.PNR) & วิธีเพิ่มรูป,ดึงรูป,ดึงชื่อรูปออกมาแสดง (อ.TTT) ขอบคุณอีกครั้งครับผม

 


บอร์ดเรียนรู้ Access สำหรับคนไทย