:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

code สำหรับ Data validation แบบ multi ติดปัญหาครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

code สำหรับ Data validation แบบ multi ติดปัญหาครับ

#1

Post by godman »

อาจารย์ครับ ผมมีโค้ดนี้อยู่ใน sheet ที่ชื่อว่า DataEntry อยู่แล้ว แต่ผมต้องการให้เซลล์ G10 เป็น Data Validation แบบ multi เผื่อผู้ใช้งานลืมว่าจะเลือกอะไร มีข้อมูล 2 คอลัมพ์ให้เขาดู ปกติ data validation มีแค่ ตัวเลือกคอลัมพ์เดียว ผมทราบว่ามันต้องใช้ macro เขียนลงไป และผมก็ไปได้ตัวอย่าง code มา ปรากฏว่าผมเขียน Priwate Sub Worksheet_Change มันใช้ืชื่อ Private Sub เหมือนกัน ผมเลยอยากทราบว่า ผมจะใช้ Private sub ชื่อเดียวกันทั้งสองอันใน sheet data entry ได้ไหม ผมรู้สึกว่ามันไม่ทำงาน ผมเลยแนบไฟล์มาให้ดูด้วย ผมต้องการ macro ที่ทำให้ data valid มันทำงานได้โดยมี 2 คอลัมพ์ในบรรทัดเดียวให้เลือก ผมแนบไฟล์มา 2 ไฟล ครับ ขออาจารย์ด้วยดู code ในไฟล์ที่สองให้ผมด้วย ผมอยากเอา code นั้นมาใส่ใน ไฟล์ที่หนึ่ง ใน shet ดังกล่าว 2 code ทำไมมันใส่ไม่ได้ครับ

Code: Select all

Option Explicit
' Developed by Contextures Inc.
' www.contextures.com
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim historyWks As Worksheet
    Dim inputWks As Worksheet
    Dim rngA As Range

    Dim lRec As Long
    Dim lRecRow As Long
    Dim lLastRec As Long
    Dim lastRow As Long

    Set rngA = ActiveCell

    If Target.Address = Me.Range("CurrRec").Address _
        Or Target.Address = Me.Range("EnSel").Address Then
      Application.EnableEvents = False
      
      If Target.Address = Me.Range("EnSel").Address Then
        Me.Range("CurrRec").Value = Me.Range("SelRec").Value
      End If

      Set inputWks = Worksheets("DataEntry")
      Set historyWks = Worksheets("TNrecordData")
  
      With historyWks
          lastRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row - 1
          lLastRec = lastRow - 1
      End With
  
      With inputWks
          lRec = .Range("CurrRec").Value
          If lRec > 0 And lRec <= lLastRec Then
                lRecRow = lRec + 1
                historyWks.Range(historyWks.Cells(lRecRow, 3), historyWks.Cells(lRecRow, 16)).Copy
                .Range("G9").PasteSpecial Paste:=xlPasteValues, Transpose:=True
                rngA.Select
        End If
      End With
      Application.EnableEvents = True
    End If

End Sub



You do not have the required permissions to view the files attached to this post.
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

Re: code สำหรับ Data validation แบบ multi ติดปัญหาครับ

#2

Post by godman »

นี่คือ code ทีสองที่ผมจะนำไปใส่ใน file แรกที่ส่งให้อาจารย์ไป แต่ใส่แล้วมันไม่ทำงานครับ โค้ดนี้ผมเอาจากไฟล์ที่แนบมาใน sheet data entry

Code: Select all

Option Explicit
' Developed by Contextures Inc.
' www.contextures.com
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo errHandler
If Target.Cells.Count > 1 Then GoTo exitHandler
If Target.Column = 2 Then
  If Target.Value = "" Then GoTo exitHandler
  Application.EnableEvents = False
  Target.Value = Worksheets("Codes").Range("C1") _
    .Offset(Application.WorksheetFunction _
    .Match(Target.Value, Worksheets("Codes").Range("ProdList"), 0), 0)
End If

exitHandler:
  Application.EnableEvents = True
  Exit Sub

errHandler:
  If Err.Number = 13 Or Err.Number = 1004 Then
    GoTo exitHandler
  Else
    Resume Next
  End If

End Sub

Sub MyFix()
Application.EnableEvents = True

End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code สำหรับ Data validation แบบ multi ติดปัญหาครับ

#3

Post by snasui »

:D
godman wrote:เป็น Data Validation แบบ multi
ช่วยขยายความประโยคนี้ว่าต้องการเป็นอย่างไรครับ ปกติ Validation มันจะ Multiple อยู่แล้ว คือสามารถเลือกได้หลายค่า
godman wrote:ผมเลยอยากทราบว่า ผมจะใช้ Private sub ชื่อเดียวกันทั้งสองอันใน sheet data entry ได้ไหม
คำตอบคือ ไม่ได้ครับ กรณีต้องการเขียนหลาย Code จาก Worksheet_Change Event ให้เขียน Code ที่ Module ปกติแล้วค่อยเรียกใช้จาก Worksheet_Change Event หรือจะเลือกเขียน Code ต่อกันไปด้านล่างเรื่อย ๆ ก็เป็นอีกทางเลือก แต่ไม่เหมาะนัก หากเป็น Code ที่ทำหลายงานจะยุ่งยากในการตรวจทาน แก้ไข ปรับปรุง เปลี่ยนแปลง เพราะ Code ชุดหนึ่ง ๆ ควรทำงานใดงานหนึ่ง เพื่อให้ง่ายต่อการปรับปรุงเปลี่ยนแปลงครับ

การเรียกใช้จาก Worksheet_Change ยกตัวอย่างเช่น ตามด้านล่างครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    Call Macro1
    Call Macro2
    Call Macro3
    '....
End Sub
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

Re: code สำหรับ Data validation แบบ multi ติดปัญหาครับ

#4

Post by godman »

Datavalidation แบบ multi หมายความว่า มันมี 2 ช่องใ้ห้เลือก เพื่อเป็นข้อมูลประกอบ แต่เวลากดเลือก มันก็ไปลงในเซลล์แค่อันเดียว เช่น ผมใส่รหัสวิชา A001 คือ วิชาภาษาไทย A002 คือวิชาภาษาอังกฤษ ผมก็ใส่แบบมัลติ ก็จะแสดง A001 ภาษาไทย ผมก็เลือก แต่มันไปแสดงค่าเพียง A001 เป็นประโยชน์ที่ผู้ใช้อาจจำไม่ได้ว่า รหัสนี้คืออะไร ครับ ผมแนบตัวอย่างมาให้อาจารย์ด้วยครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code สำหรับ Data validation แบบ multi ติดปัญหาครับ

#5

Post by snasui »

:D รับทราบครับ เป็นการแสดง Validation ให้ผู้ใช้เห็นจาก Range name ที่เป็นการ Join ข้อมูลจากหลาย Column พอเลือกแล้วจะใช้ VBA ดึงค่าที่ตรงกันจากคอลัมน์ที่เป็น Course ID มาแสดง
Post Reply