snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
sakajohn
Member
Posts: 229 Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010
#1
Post
by sakajohn » Tue Nov 15, 2016 4:16 pm
ขอสอบถามผู้รู้ครับ
1. ผมใช้ Data Validation ในการทำ list รายชื่อเครื่องที่ใช้พิมพ์ กับ วัตถุดิบ แต่ติดปัญหา คือ เราจะต้องคลิ๊กที่ปุ่ม drop down เพื่อให้แสดงข้อมูลขึ้นมาถึงจะเลือกรายการได้ ถ้าผมต้องการให้ สามารถคีย์ชื่อรายการบางคำแล้วให้รายการแสดงขึ้นมาจะทำได้ไหมครับ
2. ผมลองใช้ combo Box(Active X) มันสามารถพิมพ์แล้วข้อความขึ้นมาได้ แต่ติดตรงที่เราจะต้องมาคลิ๊กที่กล่อง มันถึงจะทำงานได้ ถ้าจะให้มันผสานอยู่ใน cell เลยจะได้ไหมครับ คือเวลาที่คีย์ข้อมูลเราจะกด enter ลงมาเรื่อยๆ พอถึง combo Box ก็สามารถที่จะคีย์ต่อได้เลย โดยไม่ต้องใช้ mouse คลิ๊ก ได้ไหมครับ
3. หรือมีวิธีอื่นๆแนะนำได้ครับ
You do not have the required permissions to view the files attached to this post.
Serverchita
Bronze
Posts: 292 Joined: Wed Nov 18, 2015 1:28 pm
Excel Ver: 2016
#2
Post
by Serverchita » Tue Nov 15, 2016 7:29 pm
ทำตามวิธีข้อ 1 เลยครับ แต่ต้องตั้งค่าตามตัวอย่างรูปภาพครับ
(หรือจะไม่ได้ติ๊กที่ Show ก็ได้นะครับ จะได้ไม่ต้องกดบ่อย)
You do not have the required permissions to view the files attached to this post.
sakajohn
Member
Posts: 229 Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010
#3
Post
by sakajohn » Wed Nov 16, 2016 10:58 am
ขอบคุณคุณServerchita มากครับ แต่มันก็ยังไม่ตอบโจทย์ที่ผมต้องการครับ คือลองทำดูแล้วตอนนี้ก็คือผู้ใช้จะพิมพ์อะไรลงไปก็ได้ซึ่งจะไม่เป็นไปตามที่เรากำหนด ตอนที่ผมยกตัวอย่างคือมันมีแค่ 9 รายการ ถ้ามันมีประมาณ 20 - 30 รายการ ผมต้องการให้พิมพ์บางคำแล้วมันขึ้นมาให้เลือกได้ เหมือนกับการทำ combo box(Active X) ถ้าจะทำแบบวิธีที่2 จะทำได้ไหมครับ
Serverchita
Bronze
Posts: 292 Joined: Wed Nov 18, 2015 1:28 pm
Excel Ver: 2016
#4
Post
by Serverchita » Wed Nov 16, 2016 3:35 pm
ต้องรอท่านอื่นมาตอบให้ครับ
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#5
Post
by snasui » Wed Nov 16, 2016 8:58 pm
sakajohn wrote: ขอสอบถามผู้รู้ครับ
1. ผมใช้ Data Validation ในการทำ list รายชื่อเครื่องที่ใช้พิมพ์ กับ วัตถุดิบ แต่ติดปัญหา คือ เราจะต้องคลิ๊กที่ปุ่ม drop down เพื่อให้แสดงข้อมูลขึ้นมาถึงจะเลือกรายการได้ ถ้าผมต้องการให้ สามารถคีย์ชื่อรายการบางคำแล้วให้รายการแสดงขึ้นมาจะทำได้ไหมครับ
2. ผมลองใช้ combo Box(Active X) มันสามารถพิมพ์แล้วข้อความขึ้นมาได้ แต่ติดตรงที่เราจะต้องมาคลิ๊กที่กล่อง มันถึงจะทำงานได้ ถ้าจะให้มันผสานอยู่ใน cell เลยจะได้ไหมครับ คือเวลาที่คีย์ข้อมูลเราจะกด enter ลงมาเรื่อยๆ พอถึง combo Box ก็สามารถที่จะคีย์ต่อได้เลย โดยไม่ต้องใช้ mouse คลิ๊ก ได้ไหมครับ
3. หรือมีวิธีอื่นๆแนะนำได้ครับ
ลองศึกษาจาก Link นี้ครับ
https://www.extendoffice.com/documents/ ... te.html#a1
sakajohn
Member
Posts: 229 Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010
#6
Post
by sakajohn » Thu Nov 17, 2016 11:51 am
snasui wrote: sakajohn wrote: ขอสอบถามผู้รู้ครับ
1. ผมใช้ Data Validation ในการทำ list รายชื่อเครื่องที่ใช้พิมพ์ กับ วัตถุดิบ แต่ติดปัญหา คือ เราจะต้องคลิ๊กที่ปุ่ม drop down เพื่อให้แสดงข้อมูลขึ้นมาถึงจะเลือกรายการได้ ถ้าผมต้องการให้ สามารถคีย์ชื่อรายการบางคำแล้วให้รายการแสดงขึ้นมาจะทำได้ไหมครับ
2. ผมลองใช้ combo Box(Active X) มันสามารถพิมพ์แล้วข้อความขึ้นมาได้ แต่ติดตรงที่เราจะต้องมาคลิ๊กที่กล่อง มันถึงจะทำงานได้ ถ้าจะให้มันผสานอยู่ใน cell เลยจะได้ไหมครับ คือเวลาที่คีย์ข้อมูลเราจะกด enter ลงมาเรื่อยๆ พอถึง combo Box ก็สามารถที่จะคีย์ต่อได้เลย โดยไม่ต้องใช้ mouse คลิ๊ก ได้ไหมครับ
3. หรือมีวิธีอื่นๆแนะนำได้ครับ
ลองศึกษาจาก Link นี้ครับ
https://www.extendoffice.com/documents/ ... te.html#a1
ผมลองทำตาม ลิงค์ ที่อาจารย์ให้แล้วครับ มีปัญหาอยากจะถามเพิ่มคือ
1. ตามไฟล์แนบ ถ้าเรา Double click ที่ cell ไหนก็จะมี combo box ขึ้นมา แต่ยังไม่มีรายการใน combobox
2. เรายังต้อง Double click ที่ cell ก่อน combo box ถึงจะโชว์ขึ้นมาใช่ไหมครับ ถ้าเรา enter เฉยๆ มันก็จะไม่โชว์ combo boxใช่ไหมครับ
3. เราจะให้แสดงรายการที่เราต้องการยังไงครับ ตามที่ดูจาก ลิงค์ ไม่ได้บอกวิธี ผมลองกำหนด ที่ property ของ combo box ตรงช่อง Listfillrange ข้อมูลก็ไม่แสดงครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#7
Post
by snasui » Thu Nov 17, 2016 7:49 pm
ตัวอย่างการปรับ Code ตามด้านล่างครับ
Code: Select all
'Other code
If Target.Validation.Type = 3 Then
Cancel = True
xStr = "Sheet1!G9:G12"
With xCombox
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 5
.Height = Target.Height + 5
.ListFillRange = xStr
.LinkedCell = Target.Address
End With
xCombox.Activate
Me.TempCombo.DropDown
End If
'Other code
sakajohn wrote: 2. เรายังต้อง Double click ที่ cell ก่อน combo box ถึงจะโชว์ขึ้นมาใช่ไหมครับ ถ้าเรา enter เฉยๆ มันก็จะไม่โชว์ combo boxใช่ไหมครับ
ถูกต้องครับ
sakajohn wrote: 3. เราจะให้แสดงรายการที่เราต้องการยังไงครับ ตามที่ดูจาก ลิงค์ ไม่ได้บอกวิธี ผมลองกำหนด ที่ property ของ combo box ตรงช่อง Listfillrange ข้อมูลก็ไม่แสดงครับ
ปรับ Code ตามด้านบนแล้วทดสอบดูใหม่ครับ
sakajohn
Member
Posts: 229 Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010
#8
Post
by sakajohn » Thu Nov 17, 2016 9:17 pm
อาจารย์ครับ ถ้าผมต้องการให้กด enter แล้วโชว์ combo box จะทำได้ไหมครับ
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#9
Post
by snasui » Thu Nov 17, 2016 9:59 pm
ทำได้ครับ ปรับ Code ให้เหลือเฉพาะใน
Worksheet_SelectionChange
กับ
TempCombo_KeyDown
ส่วน Code อื่นไม่ต้องใช้ โดยต้องปรับ Code ภายใน Procedure นี้เพื่อให้ตรงกับที่ต้องการใช้งานครับ
sakajohn
Member
Posts: 229 Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010
#10
Post
by sakajohn » Fri Nov 18, 2016 9:08 am
snasui wrote: ทำได้ครับ ปรับ Code ให้เหลือเฉพาะใน
Worksheet_SelectionChange
กับ
TempCombo_KeyDown
ส่วน Code อื่นไม่ต้องใช้ โดยต้องปรับ Code ภายใน Procedure นี้เพื่อให้ตรงกับที่ต้องการใช้งานครับ
ผมลองปรับ code แล้วครับ ตอนนี้คือ enter แล้วจะขึ้น combo box แต่มันจะไม่ค้างไว้ให้เลือกครับ ไม่ทราบว่าผมต้องปรับ code ตรงไหนเพิ่มหรือเปล่าครับ รบกวนช่วยชี้แนะด้วยครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#11
Post
by snasui » Fri Nov 18, 2016 6:10 pm
ตัวอย่างการปรับ Code ครับ
Code: Select all
Private Sub Worksheet_Selectionchange(ByVal Target As Range)
Dim xStr As String
Dim xCombox As OLEObject
Dim xWs As Worksheet
Set xWs = Application.ActiveSheet
On Error Resume Next
Application.EnableEvents = False
Set xCombox = xWs.OLEObjects("TempCombo")
With xCombox
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
End With
If Target.Validation.Type = 3 Then
Cancel = True
xStr = "Sheet1!G9:G12"
With xCombox
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 5
.Height = Target.Height + 5
.ListFillRange = xStr
.LinkedCell = Target.Address
End With
xCombox.Activate
Me.TempCombo.DropDown
End If
Application.EnableEvents = True
End Sub
sakajohn
Member
Posts: 229 Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010
#12
Post
by sakajohn » Sat Nov 19, 2016 6:48 pm
ได้แล้วครับอาจารย์ แต่ถ้าเราจะ lock ให้comboboxขึ้นเฉพาะ cell B2 เท่านั้น เราต้องไปกำหนดที่ตรงไหนครับ แล้วถ้าเราใช้วิธีนี้ ก็จะ protect sheet ไม่ได้ใช่ไหมครับ
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#13
Post
by snasui » Sat Nov 19, 2016 11:15 pm
กำหนดให้ขึ้นที่เซลล์ใดก็ต้องเขียนโปรแกรมเพิ่ม ลองเขียนมาเองก่อนครับ
การ Protect สามารถทำได้ตามปกติ คลิกขวาที่ B2 > Format Cells > ที่แถบ Protection ปลดเครื่องหมายที่ Locked > ป้องกันแผ่นงาน
sakajohn
Member
Posts: 229 Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010
#14
Post
by sakajohn » Sat Nov 19, 2016 11:27 pm
ต้องเขียนคำสั่งขึ้นมาใหม่เลยใช่ไหมครับ ไม่ได้ไปแก้ไขใน code เดิมใช่ไหมครับ
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#15
Post
by snasui » Sat Nov 19, 2016 11:31 pm
เขียนเข้าไปใน Code เดิมครับ ตรวจสอบว่าเซลล์ปัจจุบันเป็นเซลล์เป้าหมายหรือไม่ หากใช่ค่อยขึ้น Object ให้เลือกใช้ เช่นนี้ครับ
sakajohn
Member
Posts: 229 Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010
#16
Post
by sakajohn » Sun Nov 20, 2016 12:36 am
snasui wrote: เขียนเข้าไปใน Code เดิมครับ ตรวจสอบว่าเป็นปัจจุบันเป็นเซลล์เป้าหมายหรือไม่ หากใช่ค่อยขึ้น Object ให้เลือกใช้ เช่นนี้ครับ
Code: Select all
"other code'
range("B2").select
xCombox.Activate
Me.TempCombo.DropDown
End If
Application.EnableEvents = True
End Sub
ผมลองใส่ดูแล้ว กลายเป็นว่าเมื่อ อยู่ที่ B2 combo box จะไม่แสดง ทำไมถึงเป็นอย่างนั้นครับ
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#17
Post
by snasui » Sun Nov 20, 2016 6:58 am
ตัวอย่าง Code ครับ
Code: Select all
'----Other code----
With xCombox
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
End With
If Target.Address <> [b2].Address Then
Application.EnableEvents = True
Exit Sub
End If
'----Other code----
sakajohn
Member
Posts: 229 Joined: Tue Aug 06, 2013 10:55 am
Excel Ver: 2010
#18
Post
by sakajohn » Sun Nov 20, 2016 11:05 pm
อาจารย์ครับ ถ้าอยากให้ขึ้น 2 cell เช่น B2 และ B4 ทำได้ไหมครับ ขอถามตรงสูตร If Target.Address <> [b2].Address Then กับ If (Target.Address = range("b2").Address) Then ต่างกันไหมครับ
snasui
Site Admin
Posts: 30738 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#19
Post
by snasui » Sun Nov 20, 2016 11:22 pm
กรณี B2 หรือ B4 สามารถใช้ Or เข้ามาช่วยได้ครับ การอ้างอิงตามลักษณะที่ถามมานั้นเหมือนกันครับ
DhitiBank
Gold
Posts: 1676 Joined: Mon Oct 15, 2012 12:07 am
#20
Post
by DhitiBank » Mon Nov 21, 2016 3:38 pm
2016-11-21 15_33_40-Microsoft Visual Basic for Applications - combo box.xlsm [break] - [Sheet1 (Code.png
อาจารย์ครับ
range.Validation.Type
เป็นการเช็คอะไรครับ ทำไมผมลองคีย์ใน immediate window เพื่อดูค่ากลับแสดงค่าผิดพลาดว่า "Application-defined of Object-defined error" ครับ
You do not have the required permissions to view the files attached to this post.