เขียนโค้ดให้สั้นยังไงครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,506   5
URL.หัวข้อ / URL
เขียนโค้ดให้สั้นยังไงครับ

เขียนโค้ดให้สั้นยังไงครับ

SubForm มี
1.textbox      1    ชื่อ npid
2.checkbox    31 ชื่อ Ctl1 - Ctl31

ต้องเขียน โค้ด 31 ชุด ดังตัวอย่าง
คืออยากห้สั้นโค้ดสั้นกว่านี้ต้องเขียนยังไงครับ
ขอบคุณครับ

Private Sub Ctl1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Forms.main.Combo_np.Value = Me.npid
    Forms.main.d.Value = Me.Ctl1.DefaultValue
End Sub
     .
     .
     .

Private Sub Ctl31_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Forms.main.Combo_np.Value = Me.npid
    Forms.main.d.Value = Me.Ctl31.DefaultValue
End Sub

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

1 @R03379
ขอถามเพิ่มเติมครับ

checkbox ทั้ง 31 อัน เลือกได้แค่ 1 หรือเปล่าครับ
2 @R03385
- ที่ Access เปิด subform ในมุมมองออกแบบเอาไว้
- ที่ VBA เขียนโค้ดในฟอร์ม (subform) ว่า

Function MD(ctlN As String)
Forms.main.Combo_np.Value = Me.npid
Forms.main.d.Value = Me(ctlN).DefaultValue
End Function


- ไปสร้างโมดูลเปล่าๆ มาตัวนึง ยังไม่ต้องเซฟ
เอาฟังก์ชั่นนี่ วางลงไป ยังไม่ต้องเซฟ

Sub xx()
Dim ctl As Control
For Each ctl In Forms("... ใส่ชื่อของ subform....").Controls
If TypeOf ctl Is CheckBox Then ctl.OnMouseDown = "=MD(" & Chr(34) & ctl.Name & Chr(34) & ")"
Next
End Sub


- ระบุชื่อของ subform ในจุดที่ให้ระบุ
- กด ปุ่ม F5 บนแป้นคีย์บอร์ด
- ถ้าไม่ error ใดๆ ลบโมดูลใหม่ตัวนี้ทิ้งได้เลย จบงานแล้ว
- กลับไปที่ Access
- ที่ไดอะล็อกซ์ "คุณสมบัติ" ให้ตรวจสอบดูว่า ในเหตุการณ์ on mousedown ของแต่ละ checkbox มีตัวหนังสือเขียนลงไปถูกต้องแล้วหรือไม่ ถ้าถูกต้องครบถ้วน ให้เซฟและปิด subform ได้เลย

- ทดสอบการทำงานได้ตามปกติครับ

สรุปคือ ในฟอร์มย่อยของคุณ จะเหลือโค้ดแค่ 4 บรรทัด (รวม หัว-ท้าย โพรซีเยอร์)
3 @R03389
เมื่อวานไม่มีเวลาดูเลยครับ

ตอบคุณอนุชิต ครับ

เลือกได้ทั้ง 31 ตัวครับ เป็นตัวแทนวันที่ในแต่ละเดือนครับ

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

ตอบคุณ yeadram ครับ
   มี error ครับ



และสงสัยว่าบรรทัดนี้ คือยังไงครับ

- ที่ไดอะล็อกซ์ "คุณสมบัติ" ให้ตรวจสอบดูว่า ในเหตุการณ์ on mousedown ของแต่ละ checkbox มีตัวหนังสือเขียนลงไปถูกต้องแล้วหรือไม่ ถ้าถูกต้องครบถ้วน ให้เซฟและปิด subform ได้เลย

ผมตรวจสอบดู ในเหตุการณ์ on mousedown ก็ว่างเปล่าครับ ไม่มีอะไร


_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

ขอบคุณครับ
4 @R03391
ตามที่ผมเข้าใจ (ไม่รู้ว่าเข้าใจผิดหรือเปล่า)

คุณมี Checkbox อยู่ 31 ตัว เวลาเลือกที่ checkbox(1-31) ก็จะส่งค่าไปยัง control ชื่อ d นั่นก็หมายความว่าถึงแม้ว่าคุณจะเลือก 2 checkbox หรือมากกว่านั้น , control ชื่อ d ก็จะรับค่าจาก checkbox ตัวที่เลือกครั้งหลังสุดตลอด ใช่หรือไม่

ถ้าใช่ ก็สามารถใช้ option group เข้ามาช่วยก็ได้ ซึ่งภายใต้ option group ก็ประกอบด้วย checkbox ทั้ง 31 ตัว

หลังจากนั้นคุณก็เขียนคำสั่งที่ option group แทน ก็จะได้ชุดคำสั่งประมาณ 4 บรรทัด ครับ

ปล. ถ้าผมเข้าใจความหมายของคุณผิดต้องขออภัยด้วยครับ
5 @R03392
ชื่อฟอร์มของคุณ ตั้งชื่อผิดหลักครับ ก็เลยมีปัญหาเวลาเขียนโค้ด
มันมีช่องว่างภายในชื่อ
ลองใส่ blanket เพิ่มเข้าไป ดูครับ แล้วรันใหม่
Forms("[detail subform]")
หรือลองเปลี่ยนชื่อฟอร์มให้เขียนติดกันไปก่อน รัน sub xx() ผ่านแล้วก็เซฟฟอร์ม แล้วค่อยเปลี่ยนชื่อกลับคืนดังเดิม

--------------------------
ถ้า sub xx() รันไม่ผ่าน
ยังไม่ต้องไปตรวจที่ access ครับ ไม่เห็นอะไรแน่นอน
sub xx() เป็นแค่ตัวช่วยให้คุณง่ายขึ้นครับ

--------------------------
ถ้า sub xx() ยังมีปัญหาอีก ให้คุณใช้วิธีแมน่วล ก็ได้ครับ (ลืม sub xx() ไปได้เลย)
ที่เหตุการณ์ on mousedown ของทุก checkbox ให้คุณเขียนว่า
=MD("ชื่อของcheckboxตัวนั้นๆ")
เช่น
=MD("ctl1")
=MD("ctl31")
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3162s