Page 1 of 1
อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Tue Nov 29, 2022 3:58 pm
by lydiaintro
ขอสอบถามหน่อยครับ
หากเราต้องที่จะให้ข้อความมันเด้งอัตโนมัติ ต่อให้เราพิมไม่ครบ โดยที่ไม่สนใจว่าเราจะพิมพ์ข้างหน้าหรือส่วนไหนก่อนก็ได้
ตัวอย่าง
B1 พิมพ์ "a01a01" ให้มีข้อความแบบ B2 มาให้เลือกครับ โดยอ้างอิงจากคอลัมน์ C:C
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Tue Nov 29, 2022 8:04 pm
by snasui
การทำเช่นนั้นต้องอาศัย VBA จึงจะสะดวก ลองเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Wed Nov 30, 2022 1:09 pm
by lydiaintro
snasui wrote: Tue Nov 29, 2022 8:04 pm
การทำเช่นนั้นต้องอาศัย VBA จึงจะสะดวก ลองเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ
รับทราบครับ ว่าแต่ผมอยากทราบว่าทำสั่งมันเรียกว่าอะไรครับผมจะได้ศึกษาถูก
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Wed Nov 30, 2022 1:32 pm
by snasui
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Sat Dec 03, 2022 12:05 pm
by lydiaintro
สวัสดีครับอาจารย์ ผมลองแต่ยังติดตรงที่มันsearchให้แค่ในช่องComboBoxที่เราสร้องขึ้นครับ
ผมอยากให้ Row B4 เป็นแบบในช่องComboBoxด้วยครับ
ตัวอย่าง
Code: Select all
Private Comb_Arrow As Boolean
Private Sub ComboBox1_Change()
Dim i As Long
If Not Comb_Arrow Then
With Me.ComboBox1
.List = Worksheets("Name List").Range("A2", Worksheets("Name List").Cells(Rows.Count, "A").End(xlUp)).Value
.ListRows = Application.WorksheetFunction.Min(4, .ListCount)
.DropDown
If Len(.Text) Then
For i = .ListCount - 1 To 0 Step -1
If InStr(1, .List(i), .Text, vbTextCompare) = 0 Then .RemoveItem i
Next
.DropDown
End If
End With
End If
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Comb_Arrow = (KeyCode = vbKeyUp) Or (KeyCode = vbKeyDown)
If KeyCode = vbKeyReturn Then Me.ComboBox1.List = Worksheets("Name List").Range _
("A2", Worksheets("Name List").Cells(Rows.Count, "A").End(xlUp)).Value
End Sub
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Sat Dec 03, 2022 2:29 pm
by snasui
ในเซลล์ไม่มีความสามารถที่จะทำเช่นนั้นได้ ปกติก็จะใช้ VBA ควบคุม ComboBox เข้ามาช่วย
ตัวอย่างการปรับ Code ตามด้านล่างครับ
ใน Sheet5 นำ Code นี้ไปใช้
Code: Select all
Private Sub Worksheet_Selectionchange(ByVal Target As Range)
Dim c As Integer
If Target.Count > 1 Then Exit Sub
If Target.Address(0, 0) = "B4" Then
Call ListDropdown(Target)
Else
Me.OLEObjects("ComboBox1").Visible = False
End If
End Sub
จากนั้นเข้าเมนู Insert > Module เพื่อสร้าง Module จะได้ชื่อเป็น Module1 ให้นำ Code ด้านล่างไปใช้
Code: Select all
Public Sub ListDropdown(ByVal Target)
Dim xStr As String
Dim xCombox As OLEObject
Application.EnableEvents = False
Set xCombox = Worksheets("Sheet5").OLEObjects("ComboBox1")
With xCombox
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
.Top = Target.Top
End With
With Worksheets("Name List")
xStr = .Name & "!" & .Range("A2", .Range("A" & .Rows.Count).End(xlUp)) _
.Address(0, 0)
End With
With xCombox
.Visible = True
.Left = Target.Left
.Top = Target.Top - 5
.Width = Target.Width ' + 5
.Height = Target.Height + 5
.ListFillRange = xStr
.LinkedCell = Target.Address
.Activate
End With
Application.EnableEvents = True
End Sub
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Sat Dec 03, 2022 6:08 pm
by lydiaintro
เหมือนจะยังไม่ตอบโจท์ครับอาจารย์ พอดีผมได้ลองอีกวิธีครับ โดยการใช้ Form เข้ามาช่วย
แต่ผมติดตรงที่เวลาผมกดปุ่ม ยืนยัน ผมอยากให้ข้อมูลที่เคยกรอกใช้ช่อง ComboBox และ TextBox เคลียออกไปด้วยครับ
แล้วให้เคอร์เซอร์ที่กระพริบไปอยู่ที่ ComboBox แรกครับ
Code: Select all
Private Comb_Arrow As Boolean
Private Sub ComboBox1_Change()
Dim i As Long
If Not Comb_Arrow Then
With Me.ComboBox1
.List = Worksheets("Name List").Range("A2", Worksheets("Name List").Cells(Rows.Count, "A").End(xlUp)).Value
.ListRows = Application.WorksheetFunction.Min(4, .ListCount)
.DropDown
If Len(.Text) Then
For i = .ListCount - 1 To 0 Step -1
If InStr(1, .List(i), .Text, vbTextCompare) = 0 Then .RemoveItem i
Next
.DropDown
End If
End With
End If
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Comb_Arrow = (KeyCode = vbKeyUp) Or (KeyCode = vbKeyDown)
If KeyCode = vbKeyReturn Then Me.ComboBox1.List = Worksheets("Name List").Range _
("A2", Worksheets("Name List").Cells(Rows.Count, "A").End(xlUp)).Value
End Sub
Private Sub CommandButton1_Click()
emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1
Cells(emptyRow, 1).Value = ComboBox1.Value
Cells(emptyRow, 2).Value = TextBox2.Value
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub userform_initialize()
ComboBox1.Value = ""
TextBox2.Value = ""
End Sub
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Sat Dec 03, 2022 6:23 pm
by snasui
ตัวอย่างการปรับ Code บาง Procedure ตามด้านล่างครับ
Code: Select all
Private Sub userform_initialize()
ComboBox1.Value = ""
TextBox2.Value = ""
ComboBox1.SetFocus
End Sub
Private Sub CommandButton1_Click()
emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1
Cells(emptyRow, 1).Value = ComboBox1.Value
Cells(emptyRow, 2).Value = TextBox2.Value
ComboBox1.Value = ""
TextBox2.Value = ""
ComboBox1.SetFocus
End Sub
Private Sub ComboBox1_Change()
Dim i As Long
If Not Comb_Arrow Then
With Me.ComboBox1
.List = Worksheets("Name List").Range("A2", Worksheets("Name List").Cells(Rows.Count, "A").End(xlUp)).Value
.ListRows = Application.WorksheetFunction.Min(4, .ListCount)
If Len(.Text) Then
.DropDown
End If
If Len(.Text) Then
For i = .ListCount - 1 To 0 Step -1
If InStr(1, .List(i), .Text, vbTextCompare) = 0 Then .RemoveItem i
Next
.DropDown
End If
End With
End If
End Sub
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Sat Dec 03, 2022 6:39 pm
by lydiaintro
ได้ผลตามที่ต้องการเลยครับ
แต่ไม่ค่อยทราบวิธีการสักเท่าไหร่ว่าใช้คำสั่งอะไรนอกจาก SetFocus พอดีผมพึ่งเริ่มหัดเขียด VBA ด้วยครับ แฮ่ะ ๆ
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Mon Aug 14, 2023 3:14 pm
by SuminO
สวัสดีครับ
อยากให้ List ลากลงมาทุกเซล์ ยังไงครับ
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Mon Aug 14, 2023 3:45 pm
by snasui
ตัวอย่างการปรับ Code ครับ
ที่ Procedure
Worksheet_Selectionchange
เปลี่ยน
If Target.Address(0, 0) = "B4" Then
เป็น
If Target.Column = 2 Then
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Mon Aug 14, 2023 4:14 pm
by SuminO
การทำงานค้นหาในลักษณะนี้
มีวิธีอื่นที่ง่ายกว่านี้ไหมครับ อาจารย์
Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ
Posted: Mon Aug 14, 2023 5:16 pm
by snasui
หัวข้อนี้คือให้แสดงรายการขณะที่พิมพ์ยังไม่ครบ
ปัจจุบันไม่มีวิธีอื่นที่สามารถทำเช่นนี้ได้ ต้องใช้ VBA เข้ามาช่วย และเมื่อต้องใช้ VBA คิดว่าไม่มีวิธีที่ง่ายครับ