: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

อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
lydiaintro
Member
Member
Posts: 15
Joined: Mon Jul 18, 2022 11:23 am
Excel Ver: 2013

อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#1

Post by lydiaintro »

ขอสอบถามหน่อยครับ
หากเราต้องที่จะให้ข้อความมันเด้งอัตโนมัติ ต่อให้เราพิมไม่ครบ โดยที่ไม่สนใจว่าเราจะพิมพ์ข้างหน้าหรือส่วนไหนก่อนก็ได้


ตัวอย่าง

B1 พิมพ์ "a01a01" ให้มีข้อความแบบ B2 มาให้เลือกครับ โดยอ้างอิงจากคอลัมน์ C:C

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

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#2

Post by snasui »

:D การทำเช่นนั้นต้องอาศัย VBA จึงจะสะดวก ลองเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ
lydiaintro
Member
Member
Posts: 15
Joined: Mon Jul 18, 2022 11:23 am
Excel Ver: 2013

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#3

Post by lydiaintro »

snasui wrote: Tue Nov 29, 2022 8:04 pm :D การทำเช่นนั้นต้องอาศัย VBA จึงจะสะดวก ลองเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ

รับทราบครับ ว่าแต่ผมอยากทราบว่าทำสั่งมันเรียกว่าอะไรครับผมจะได้ศึกษาถูก
lydiaintro
Member
Member
Posts: 15
Joined: Mon Jul 18, 2022 11:23 am
Excel Ver: 2013

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#5

Post by lydiaintro »

snasui wrote: Wed Nov 30, 2022 1:32 pm :D ลองศึกษาดูครับ

https://www.youtube.com/results?search_ ... +down+list

สวัสดีครับอาจารย์ ผมลองแต่ยังติดตรงที่มัน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
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#6

Post by snasui »

:D ในเซลล์ไม่มีความสามารถที่จะทำเช่นนั้นได้ ปกติก็จะใช้ 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
lydiaintro
Member
Member
Posts: 15
Joined: Mon Jul 18, 2022 11:23 am
Excel Ver: 2013

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#7

Post 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
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#8

Post by snasui »

:D ตัวอย่างการปรับ 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
lydiaintro
Member
Member
Posts: 15
Joined: Mon Jul 18, 2022 11:23 am
Excel Ver: 2013

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#9

Post by lydiaintro »

ได้ผลตามที่ต้องการเลยครับ

แต่ไม่ค่อยทราบวิธีการสักเท่าไหร่ว่าใช้คำสั่งอะไรนอกจาก SetFocus พอดีผมพึ่งเริ่มหัดเขียด VBA ด้วยครับ แฮ่ะ ๆ
SuminO
Member
Member
Posts: 91
Joined: Thu Jul 25, 2019 4:57 pm
Excel Ver: 365 2021

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#10

Post by SuminO »

สวัสดีครับ
อยากให้ List ลากลงมาทุกเซล์ ยังไงครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#11

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

ที่ Procedure Worksheet_Selectionchange

เปลี่ยน If Target.Address(0, 0) = "B4" Then เป็น If Target.Column = 2 Then
SuminO
Member
Member
Posts: 91
Joined: Thu Jul 25, 2019 4:57 pm
Excel Ver: 365 2021

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#12

Post by SuminO »

การทำงานค้นหาในลักษณะนี้
มีวิธีอื่นที่ง่ายกว่านี้ไหมครับ อาจารย์
User avatar
snasui
Site Admin
Site Admin
Posts: 30919
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: อยากให้เด้งข้อความที่ถูกต้อง ต่อให้เราพิมพ์ยังไม่หมดครับ

#13

Post by snasui »

:D หัวข้อนี้คือให้แสดงรายการขณะที่พิมพ์ยังไม่ครบ

ปัจจุบันไม่มีวิธีอื่นที่สามารถทำเช่นนี้ได้ ต้องใช้ VBA เข้ามาช่วย และเมื่อต้องใช้ VBA คิดว่าไม่มีวิธีที่ง่ายครับ
Post Reply