: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

Drop-Down List

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Drop-Down List

#1

Post by joo »

การทำ Drop-Down List แบบคีย์อักษรตัวแรกก็จะ List รายชื่อที่เกี่ยวข้องกับอักษรตัวแรกมาให้เลือก จากตัวอย่างนี้เขาทำอย่างไรครับ :)
http://www.bettersolutions.com/excel/EG ... 611612.htm
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#2

Post by snasui »

:D Code นั้นมีผู้ทดลองแล้วยังเกิดค่าผิดพลาดอยู่บ้างครับ ดูที่ http://www.ozgrid.com/forum/showthread. ... 223&page=1

ลองใช้ Code ของ Colo ที่นี่แทนครับ http://puremis.net/excel/code/041.shtml
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Drop-Down List

#3

Post by joo »

ขอบคุณครับอาจารย์...ผมทดลองแล้วพบว่าค่าไม่ยอม List รายชื่อตามตัวอักษรที่พิมพ์เลยครับช่วยดูให้หน่อยครับว่าผิดพลาดตรงไหน :)
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#4

Post by snasui »

เท่าที่ทดสอบดูพบว่า Code ทำงานได้ครับ

ลองตามนี้ครับ
  1. กดปุ่ม KeyEventOn
  2. ในคอลัมน์ A ที่เซลล์ใด ๆ คีย์ a ทดสอบเลือกเซลล์อื่นและคีย์ค่าใหม่ หากคีย์ค่าใหม่ในเซลล์เดิมให้กดแป้น Delete ก่อนแล้วคีย์ค่าใด ๆ ตามต้องการ สังเกตดูผล
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Drop-Down List

#5

Post by joo »

ที่ผมทดลอง Code โค๊ดมันทำงานแบบนี้ครับ เช่น เมื่อพิมพ์ a ที่เซลล์ A1 ก็จะมีข้อมูลที่เกี่ยวข้องกับอักษร "A" มาให้เลือก ที่ต้องการคือ เมื่อพิมพ์อักษร "A" ก็ให้แสดงรายชื่อที่ขึ้นต้นด้วยอักษร "A" ทั้งหมดแบบ Drop Down List ลงมา และให้โค๊ดทำงานทำงานเพียงเซลล์เดียวไม่ต้องทำทั้งคอลัมภ์ ต้องปรับโค๊ดอย่างไรดีครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#6

Post by snasui »

การให้ Code ทำงานในเซลล์เดียวเช่นที่ A1 ให้เปลี่ยนจาก Selection เป็น [A1] หรือ Range("A1") จะได้ Code ตามด้านล่างครับ

Code: Select all

Sub MyValidation(ByVal KeyCode As Long)
    Dim strText As String, strList As String
    If Not TypeOf [a1] Is Range Then Exit Sub

    strText = [a1].Value & Chr(KeyCode)
    strList = MakeArr(strText)
    [a1].Value = strText
    If strList = "False" Then
        [a1].Validation.Delete
    Else
        With [a1].Validation
            .Delete
            .Add 3, 1, 1, Formula1:=strList
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
        End With
    End If
End Sub
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Drop-Down List

#7

Post by joo »

โค๊ดนี้รองรับภาษาไทยไหมครับผมลองเปลี่ยนให้แสดงเป็นอักษรไทยโดยทำการเปลี่ยนโค๊ดแบบนี้
Sub KeyEventOn()
For i = 161 To 206
Application.OnKey "{" & i & "}", "'MyValidation """ & i & """'"
Next
End Sub
พบว่าโค๊ดไม่ยอมทำงานครับและถ้าต้องการให้โค๊ดทำงานทันทีเมื่อเซลล์ “A1”ได้รับโฟกัสและหยุดทำงานเมื่อเลื่อนไปยังเซลล์อื่นต้องปรับแก้ไขโค๊ดอย่างไรดีครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#8

Post by snasui »

OnKey จะรองรับภาษาอังกฤษ สำหรับภาษาอื่นไม่น่าจะรองรับครับ

กรณีต้องการให้ KeyEventOn, KeyEventOff ทำงานเมื่อมีการเลือกหรือไม่ได้เลือก A1 ลองเพิ่ม Code ที่ชีท 1 ตามด้านล่างครับ

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
    KeyEventOn
Else
    KeyEventOff
End If
End Sub
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Drop-Down List

#9

Post by joo »

ขอบคุณครับ...แสดงว่าถ้าต้องภาษาไทยก็ต้องเขียนฟังชั้นขึ้นมาเองใช้ไหมครับ พอมีแนวทางบ้างไหมครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#10

Post by snasui »

:D ที่เขียนเป็น VBA ก็ถือว่าเป็นการเขียนฟังก์ชั่นขึ้นมาใช้เองครับ แต่เท่าที่ทดสอบไม่สามารถใช้กับภาษาไทยได้ จริง ๆ การทำแบบนี้สามารถทำได้หลายแบบ แบบหนึ่งก็ตามไฟล์แนบครับ ซึ่งเป็นการใช้สูตรเข้ามาช่วยทำ Validation

ผมเพิ่มตัวช่วยเข้าไปที่คอลัมน์ D:E เพื่อหาว่าค่าที่เราคีย์นั้นมีในเซลล์ใด ๆ หรือไม่ หากมีก็นำมาแสดงรวมกันแล้วนำค่าที่ได้นี้ไปทำ Validation

การทดสอบ ให้คีย์ค่าใด ๆ ลงใน A1 > Ctrl+Enter (เพื่อไม่ให้ Cursor ย้ายไปด้านล่าง) > คลิก Drowdown ที่ A1 เพื่อเลือกค่าที่ต้องการ
You do not have the required permissions to view the files attached to this post.
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Drop-Down List

#11

Post by joo »

ที่ C1:C20 ผมทดลองเปลี่ยนเป็นชื่อคนดู พบว่าที่ A1 โค๊ดไม่ยอมทำงานครับ :D
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#12

Post by snasui »

เอา Code VBA ทั้งหลายที่มีออกไปก่อนครับ สูตรที่เขียนนั้นไม่ได้ให้ทำงานร่วมกับ VBA ครับ (ในไฟล์ที่ผมแนบมานั้นไม่มี Event ให้เช็คเซลล์เพื่อ Run Procedure) :D
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Drop-Down List

#13

Post by joo »

ทดลองแล้วใช้ได้ครับ...แล้วถ้าต้องการให้เมื่อคีย์อักษรตัวแรกที่เซลล์ "A1" ก็ให้ข้อมูลที่เกี่ยวข้องแสดงแบบ DropDown List ลงมาเองอัติโนมัติไม่ต้องไปคลิกที่ปุ่มลูกศรก่อน ต้องปรับแก้โค๊ดอย่างไรดีครับ :)

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" Then
     Worksheets(Target.Value).Select
     Range("A1").DropDown
 End If
 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: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#14

Post by snasui »

:D ลองตามนี้ครับ

ที่ Sheet1 ปรับ Code เป็น

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" Then
    MyValidation
 End If
 Application.EnableEvents = True
End Sub
ที่ Module1 ปรับ Code เป็น

Code: Select all

Sub MyValidation()
On Error Resume Next
    With [A1].Validation
        .Modify Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=ValidateVals"
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = False
    End With
[A1].Select
Application.SendKeys "%{DOWN}"
End Sub
ดูไฟล์แนบประกอบครับ
You do not have the required permissions to view the files attached to this post.
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Drop-Down List

#15

Post by joo »

ขอบคุณครับ...
ทดลองแล้วพบว่าเมื่อพิมพ์อักษรตัวแรกเสร็จต้องกด Enter ก่อนทุกครั้งข้อมูลจึงแสดงแบบ DropDown List ลงมาให้เห็นแล้วก็จะมีรายชื่ออื่นๆที่มีอักษรที่เหมือนกับที่พิมพ์ไว้มาแสดงด้วย เช่น เมื่อพิมพ์ "ด" แล้ว enter ก็จะแสดงรายชื่อ ไกรเดช,ครรชิด,ดนัย,เดชา
แล้วถ้าคีย์อักษรตัวแรกเสร็จก็ให้แสดง DropDown List ลงมาเลยพร้อมแสดงเฉพาะรายชื่อที่มีอักษรที่ขึ้นต้นเหมือนกับอักษรที่คีย์ในเซลล์ "A1" เช่น เมื่อคีย์ "บ" เสร็จก็ให้แสดงเฉพาะชื่อ "บรรพต" ลงมาเลย แบบนี้พอได้ไหมครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#16

Post by snasui »

:lol: ใน WorkSheet, ThisWorkbook ยังไม่พบ Event ที่ทำงานเช่นที่ถามครับ จาก Event นี้

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
....
End Sub
จะต้องเปลี่ยนแปลงค่าในเซลล์ก่อน Code จึงจะทำงาน แค่คีย์ลงไปยังไม่กด Enter หรือยังไม่คลิกไปที่อื่น โปรแกรมจะไม่รับรู้ว่าเป็นการเปลี่ยนแปลงเซลล์ ถือว่าการเปลี่ยนแปลงเซลล์ยังไม่เกิดขึ้นจึงยังไม่ทำงาน :lol:
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Drop-Down List

#17

Post by joo »

ตอนแรกเข้าใจว่าใน Excel จะมี Event เกี่ยวกับการได้รับค่าจากแป้นพิมพ์ โค๊ดจึงจะทำงานครับ :lol:
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#18

Post by snasui »

:shock:
joo wrote:ตอนแรกเข้าใจว่าใน Excel จะมี Event เกี่ยวกับการได้รับค่าจากแป้นพิมพ์ โค๊ดจึงจะทำงานครับ :lol:
ตอนที่สอง :lol: คิดว่าคุณ joo เข้าใจตามนี้ไปแล้วครับ
snasui wrote:OnKey จะรองรับภาษาอังกฤษ สำหรับภาษาอื่นไม่น่าจะรองรับครับ

กรณีต้องการให้ KeyEventOn, KeyEventOff ทำงานเมื่อมีการเลือกหรือไม่ได้เลือก A1 ลองเพิ่ม Code ที่ชีท 1 ตามด้านล่างครับ

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
    KeyEventOn
Else
    KeyEventOff
End If
End Sub
joo wrote:ขอบคุณครับ...แสดงว่าถ้าต้องภาษาไทยก็ต้องเขียนฟังชั้นขึ้นมาเองใช้ไหมครับ พอมีแนวทางบ้างไหมครับ :D
snasui wrote::D ที่เขียนเป็น VBA ก็ถือว่าเป็นการเขียนฟังก์ชั่นขึ้นมาใช้เองครับ แต่เท่าที่ทดสอบไม่สามารถใช้กับภาษาไทยได้ จริง ๆ การทำแบบนี้สามารถทำได้หลายแบบ แบบหนึ่งก็ตามไฟล์แนบครับ ซึ่งเป็นการใช้สูตรเข้ามาช่วยทำ Validation

ผมเพิ่มตัวช่วยเข้าไปที่คอลัมน์ D:E เพื่อหาว่าค่าที่เราคีย์นั้นมีในเซลล์ใด ๆ หรือไม่ หากมีก็นำมาแสดงรวมกันแล้วนำค่าที่ได้นี้ไปทำ Validation

การทดสอบ ให้คีย์ค่าใด ๆ ลงใน A1 > Ctrl+Enter (เพื่อไม่ให้ Cursor ย้ายไปด้านล่าง) > คลิก Drowdown ที่ A1 เพื่อเลือกค่าที่ต้องการ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Drop-Down List

#19

Post by joo »

เข้าใจทั้งสองตอนแล้วครับ :D สงสัยว่าผมคงจะสับสนเองแน่ๆเลยครับ :?: :lol:
มีข้อสงสัยเพิ่มครับเวลาเราเลือกรายการของข้อมูลที่แสดงใน List แล้วทำไมข้อมูลที่เราเลือกยังคงแสดง DropDown List ให้เห็นอยู่ และกด enter ก็ไม่ไปไหนต้องใช้เม้าน์คลิกเลือกที่เซลล์อีกครั้งถึงจะหายครับ ต้องปรับโค๊ดเพิ่มอย่างไรครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Drop-Down List

#20

Post by snasui »

:D เนื่องจากเราใช้ Change Event ทุกเหตุการณ์ที่เกิดการเปลี่ยนแปลงในเซลล์ จะทำให้ Code ทำงานเสมอ

ลองปรับที่ Event ครับ เช่น หากนับแล้วมีอักขระน้อยว่า 3 อักขระก็ยังคงแสดงอยู่เช่นเดิม ถ้าอักขระมากกว่าหรือเท่ากับ 3 ขึ้นไปก็จะไม่แสดงขึ้นมาอีก ประเด็นที่จะเกิดสำหรับการปรับเช่นนี้คือคีย์ 3 อักขระเป็นต้นไป Code จะไม่ทำงานต้องคลิก Drop Down เองครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Address = "$A$1" And Len(Target) < 3 Then
    MyValidation
 End If
 Application.EnableEvents = True
End Sub
Post Reply