: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

ขอตัวอย่างการค้นหารายชื่อโดยใช้ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#24

by yodpao.b » Thu Jun 06, 2013 7:44 pm

ขอบคุณมากครับ Code ตัวใหม่นี้ใช้ได้เลยครับ

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#23

by snasui » Thu Jun 06, 2013 7:36 pm

:o ดูเหมือนจะไม่ได้ผล ลองทดสอบ Code ด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    On Error Resume Next
    Dim rAll As Range
    Dim lMatch As Long
    Dim lMatch1 As Long
    Dim lMatch2 As Long
    Dim lCountif As Long
    
    With Sheets("Variable")
        Set rAll = .Range("G:G")
        rAll.NumberFormat = "@"
        lCountif = Application.CountIf(rAll, CbB11.Text)
            If lCountif > 0 Then
                    lMatch1 = Application.Match(CbB11.Text, rAll, 0)
                    lMatch2 = Application.Match(CDbl(CbB11.Text), rAll, 0)
                    lMatch = lMatch1 + lMatch2
                    TB12.Text = .Range("G" & lMatch).Offset(0, 1)
                    TB13.Text = .Range("G" & lMatch).Offset(0, 2)
                    TB14.Text = .Range("G" & lMatch).Offset(0, 3)
                    TB15.Text = .Range("G" & lMatch).Offset(0, 4)
                    TB16.Text = .Range("G" & lMatch).Offset(0, 6)
             Else
             MsgBox " ¡ÃسҾÔÁ¾ìàÅ¢»ÃШӵÑÇ¡è͹ËÃ×ÍàÅ¢»ÃШӵÑÇäÁèÁÕã¹°Ò¹¢éÍÁÙÅ", vbExclamation, "°Ò¹¢éÍÁÙźؤ¤Å"
             CbB11.Text = ""
        End If
    End With
End Sub

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#22

by snasui » Thu Jun 06, 2013 7:07 pm

:D เรียงลำดับ Code ก่อนหลังใหม่เป็นตามด้านล่างครับ

Code: Select all

'Other code
Set rAll = .Range("G:G")
rAll.NumberFormat = "@"
lCountif = Application.CountIf(rAll, CbB11.Text)
'Other code

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#21

by yodpao.b » Thu Jun 06, 2013 6:52 pm

เรียนอาจารย์ครับ
จุดประสงค์คือ เมื่อเลือกเลขประจำตัวแล้วให้โชว์ข้อมูล
ผมรองเลือกที่ละตัวเลข อันที่ 1 และ 2 โชว์
อันที่ 3 และ 4 ไม่โชว์ (ผิด) ที่ถูกคือต้องโชว์
เรียนอาจารย์ช่วยแก้ให้หน่อยครับ

Code: Select all

Private Sub CommandButton1_Click()
On Error Resume Next
    Dim rAll As Range
    Dim lMatch As Long
    Dim lCountif As Long
    
    With Sheets("Variable")
        Set rAll = .Range("G:G")
        lCountif = Application.CountIf(rAll, CbB11.Text)
        rAll.NumberFormat = "@"
            If lCountif > 0 Then
                 If IsNumeric(CbB11.Text) Then
                      lMatch = Application.Match(CDbl(CbB11.Text), rAll, 0)
                 Else
                      lMatch = Application.Match(CbB11.Text, rAll, 0)
                 End If
                    TB12.Text = .Range("G" & lMatch).Offset(0, 1)
                    TB13.Text = .Range("G" & lMatch).Offset(0, 2)
                    TB14.Text = .Range("G" & lMatch).Offset(0, 3)
                    TB15.Text = .Range("G" & lMatch).Offset(0, 4)
                    TB16.Text = .Range("G" & lMatch).Offset(0, 6)
        Else
             MsgBox " ¡ÃسҾÔÁ¾ìàÅ¢»ÃШӵÑÇ¡è͹ËÃ×ÍàÅ¢»ÃШӵÑÇäÁèÁÕã¹°Ò¹¢éÍÁÙÅ", vbExclamation, "°Ò¹¢éÍÁÙźؤ¤Å"
             CbB11.Text = ""
        End If
    End With
End Sub
Attachments
ค้นหาโดยVBAถ้าหาไม่เจอไม่ให้Error_Cobobox แบบตัวเลขและข้อคาวม1.xls
(53.5 KiB) Downloaded 18 times

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#20

by snasui » Thu Jun 06, 2013 4:09 pm

:D ที่เขียนมานั้นไม่ถูกต้องครับ เงื่อนไขเดียวกันแต่ให้ Match คนละแบบสามารถอธิบายได้ด้วยตัวของมันเองอยู่แล้วว่าไม่ถูกต้อง

If IsNumeric(CbB11.Text) Then คือให้ตรวจสอบว่า CbB11.Text เป็นตัวเลขหรือไม่ แม้จะถูกจัดเป็น Text แต่หากว่าเป็นตัวเลขล้วนมันก็ถูกมองว่าเป็นตัวเลข

เพื่อให้ง่ายต่อการใช้งานให้แปลง rAll ให้เป็น Text เสียก่อนแล้วค่อยนำค่าใน TextBox ไป Math กับ rAll ซึ่งสามารถปรับ Code เป็น

Code: Select all

'Other code
rAll.NumberFormat = "@"
If lCountif > 0 Then
    lMatch = Application.Match(CbB11.Text, rAll, 0)
'Other code

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#19

by yodpao.b » Thu Jun 06, 2013 1:56 pm

อาจารย์ครับอาจารย์ผมลองเดาเปลี่ยนโคดแล้วดังนี้

Code: Select all

Private Sub CommandButton1_Click()
On Error Resume Next
    Dim rAll As Range
    Dim lMatch As Long
    Dim lCountif As Long
    
    With Sheets("Variable")
        Set rAll = .Range("G:G")
        lCountif = Application.CountIf(rAll, CbB11.Text)
        If lCountif > 0 Then
                If IsNumeric(CbB11.Text) Then
                     lMatch = Application.Match(CDbl(CbB11.Text), rAll, 0)    '    ใช้ได้กลับตัวเลขอย่างเดียว
                End If
                If IsNumeric(CbB11.Text) Then
                     lMatch = Application.Match(CbB11.Text, rAll, 0)      '    ใช้ได้กลับข้อความอย่างเดียว
                End If

                    TB12.Text = .Range("G" & lMatch).Offset(0, 1)
                    TB13.Text = .Range("G" & lMatch).Offset(0, 2)
                    TB14.Text = .Range("G" & lMatch).Offset(0, 3)
                    TB15.Text = .Range("G" & lMatch).Offset(0, 4)
                    TB16.Text = .Range("G" & lMatch).Offset(0, 6)
        Else
             MsgBox " กรุณาพิมพ์เลขประจำตัวก่อนหรือเลขประจำตัวไม่มีในฐานข้อมูล", vbExclamation, "ฐานข้อมูลบุคคล"
             CbB11.Text = ""
        End If
    End With
End Sub
ใช้ได้ครับ
แต่ขอถามว่าถูกต้องไหมครับในการเขียนแบบนี้
โคดที่แก้ไขแล้ว

Code: Select all

        If lCountif > 0 Then
                If IsNumeric(CbB11.Text) Then
                     lMatch = Application.Match(CDbl(CbB11.Text), rAll, 0)    '    ใช้ได้กลับตัวเลขอย่างเดียว
                End If
                If IsNumeric(CbB11.Text) Then
                     lMatch = Application.Match(CbB11.Text, rAll, 0)      '    ใช้ได้กลับข้อความอย่างเดียว
                End If
ส่วนโคดเดิม

Code: Select all

If lCountif > 0 Then
     If IsNumeric(CbB02.Text) Then
          lMatch = Application.Match(CDbl(CbB02.Text), rAll, 0)
     Else
          lMatch = Application.Match(CbB02.Text, rAll, 0)
     End If
ความหมายทั้ง 2 โคด มันน่าจะหมายความเหมือนกันไหมครับ
และถ้าเหมือนกันทำไมถึงไม่ถูกต้องครับ

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#18

by yodpao.b » Thu Jun 06, 2013 1:34 pm

เรียนอาจารยืครับต้องขอโทษครับ
Code ที่อาจารย์ให้ Ok ครับ

แต่รบกวนอาจารย์ช่วยดูให้หน่อย เมื่อนำมาใช้กับอีก file กับใช้ไม่ได้ งงมากครับ ช่วยแก้ไขให้ด้วยครับ

Code: Select all

Private Sub CommandButton1_Click()
On Error Resume Next
    Dim rAll As Range
    Dim lMatch As Long
    Dim lCountif As Long
    
    With Sheets("Variable")
        Set rAll = .Range("G:G")
        lCountif = Application.CountIf(rAll, CbB11.Text)
        If lCountif > 0 Then
                If IsNumeric(CbB11.Text) Then
                     lMatch = Application.Match(CDbl(CbB11.Text), rAll, 0)    '    ãªéä´é¡ÅѺµÑÇàÅ¢ÍÂèÒ§à´ÕÂÇ
                Else
                     lMatch = Application.Match(CbB11.Text, rAll, 0)      '    ãªéä´é¡ÅѺ¢éͤÇÒÁÍÂèÒ§à´ÕÂÇ
                End If
                    TB12.Text = .Range("G" & lMatch).Offset(0, 1)
                    TB13.Text = .Range("G" & lMatch).Offset(0, 2)
                    TB14.Text = .Range("G" & lMatch).Offset(0, 3)
                    TB15.Text = .Range("G" & lMatch).Offset(0, 4)
                    TB16.Text = .Range("G" & lMatch).Offset(0, 6)
        Else
             MsgBox " ¡ÃسҾÔÁ¾ìàÅ¢»ÃШӵÑÇ¡è͹ËÃ×ÍàÅ¢»ÃШӵÑÇäÁèÁÕã¹°Ò¹¢éÍÁÙÅ", vbExclamation, "°Ò¹¢éÍÁÙźؤ¤Å"
             CbB11.Text = ""
        End If
    End With
End Sub
จากรูปด้านล่าง
ถ้าเลือก 178187 ข้อมูลเปลียนแปลง (ถูก)
แต่ถ้าเลือก 032195 ข้อมูลไม่ยอมเปลียนแปลง (ผิด)
Capture1.JPG
Capture1.JPG (41.71 KiB) Viewed 998 times
Attachments
ค้นหาโดยVBAถ้าหาไม่เจอไม่ให้Error_Cobobox แบบตัวเลขและข้อคาวม.xls
(67 KiB) Downloaded 36 times

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#17

by yodpao.b » Thu Jun 06, 2013 12:09 pm

ขอบคุุณมากครับอาจารย์
ผมต้องการโคดแบบนี้มานานแล้วครับ
เพราะที่ทำงานบางคนต้องการพิมพ์เอง บางคนก็ใช้boxlist
แต่เวลาพิพม์ผิดมักจะ EEror
แต่ตอนนี้ไม่มีปัญหาแล้วครับ
ขอบคุุณมาก

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#16

by snasui » Thu Jun 06, 2013 7:08 am

:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

'Other code
If lCountif > 0 Then
     If IsNumeric(CbB02.Text) Then
          lMatch = Application.Match(CDbl(CbB02.Text), rAll, 0)
     Else
          lMatch = Application.Match(CbB02.Text, rAll, 0)
     End If
'Other code

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#15

by yodpao.b » Thu Jun 06, 2013 1:01 am

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA
untitled123.GIF
untitled123.GIF (20.98 KiB) Viewed 1015 times
จากรูปข้อมูลในวงกลมมีทั้งข้อความ และ ตัวเลข

ถ้าผมใช้ โคด lMatch = Application.Match(CbB02.Text, rAll, 0) ก็จะเรียกได้ เฉพาะ ข้อความ
ถ้าผมใช้ โคด lMatch = Application.Match(CLng(CbB02.Text), rAll, 0) ก็จะเรียกได้ เฉพาะ ตัวเลข
ผมเลยนำโคดมาผสมกันแบบนี้ lMatch = Application.Match(CbB02.Text, rAll, 0) Or Application.Match(CLng(CbB02.Text), rAll, 0)
ที่นี้เรียกไม่ได้เลยครับ

อยากได้ โคดที่อ่านได้ทั้ง ข้อความ และ ตัวเลข ครับจะแขอย่างไรดี

รูปแบบที่ใช้งานฟอร์มดังรูปล่างที่วงกลม จะเห็นว่ามีทั้งต้วเลขและตัวหนังสือผสมกัน อีกบรรทัด ก็จะเป็นเฉพาะตัวเลขอย่างเดียว
untitled1234.GIF
untitled1234.GIF (12.21 KiB) Viewed 1014 times
ผมได้แนบไฟล์มาด้วย

Code: Select all

Private Sub CommandButton2_Click()
On Error Resume Next

    Dim rAll As Range
    Dim lMatch As Long
    Dim lCountif As Long
    
    imgBox.Picture = LoadPicture("")
    Sheets("HistoryDurable").Select
    Range("F7").Select
    
    With Sheets("HistoryDurable")
        Set rAll = .Range("F:F")
        lCountif = Application.CountIf(rAll, CbB02.Text)
        If lCountif > 0 Then
            lMatch = Application.Match(CbB02.Text, rAll, 0) Or Application.Match(CLng(CbB02.Text), rAll, 0)                          '   lMatch = Application.Match(CLng(CbB02.Text), rAll, 0)  ãªéä´é¡ÅѺµÑÇàÅ¢ÍÂèÒ§à´ÕÂÇ
            CbB01.Text = Clear
            TB1.Text = .Range("F" & lMatch).Offset(0, -4).Value
            TB2.Text = .Range("F" & lMatch).Offset(0, -3).Value
            CbB3.Text = .Range("F" & lMatch).Offset(0, -2).Value
            CbB4.Text = .Range("F" & lMatch).Offset(0, -1).Value
            TB5.Text = .Range("F" & lMatch).Offset(0, 0).Value
            TB16.Text = .Range("F" & lMatch).Offset(0, 1).Value
            TB6.Text = .Range("F" & lMatch).Offset(0, 2).Value
            CbB7.Text = .Range("F" & lMatch).Offset(0, 3).Value
            CbB8.Text = .Range("F" & lMatch).Offset(0, 4).Value
            TB9.Text = .Range("F" & lMatch).Offset(0, 5).Value
            TB10.Text = .Range("F" & lMatch).Offset(0, 6).Value
            TB11.Text = .Range("F" & lMatch).Offset(0, 7).Value
            CbB12.Text = .Range("F" & lMatch).Offset(0, 8).Value
            CbB13.Text = .Range("F" & lMatch).Offset(0, 9).Value
            TB14.Text = .Range("F" & lMatch).Offset(0, 37).Value
            TB15.Text = .Range("F" & lMatch).Offset(0, 38).Text
            TB21.Text = .Range("F" & lMatch).Offset(0, 10).Value
            TB22.Text = .Range("F" & lMatch).Offset(0, 11).Text                       ' à¡ÕÂǡѺáÊ´§¤èÒÇѹ·Õè text ,value
            CbB23.Text = .Range("F" & lMatch).Offset(0, 12).Value
            CbB24.Text = .Range("F" & lMatch).Offset(0, 13).Value
            TB25.Text = .Range("F" & lMatch).Offset(0, 14).Text
            TB31.Text = .Range("F" & lMatch).Offset(0, 15).Value
            TB41.Text = .Range("F" & lMatch).Offset(0, 16).Value
            TB42.Text = .Range("F" & lMatch).Offset(0, 17).Text
            CbB43.Text = .Range("F" & lMatch).Offset(0, 18).Value
            TB44.Text = .Range("F" & lMatch).Offset(0, 19).Value
            TB45.Text = .Range("F" & lMatch).Offset(0, 20).Value + " , " + .Range("F" & lMatch).Offset(0, 21).Value + " , " + .Range("F" & lMatch).Offset(0, 22).Value + " , " + .Range("F" & lMatch).Offset(0, 23).Value
            CbB46.Text = .Range("F" & lMatch).Offset(0, 24).Value
            TB47.Text = .Range("F" & lMatch).Offset(0, 25).Value
            TB48.Text = .Range("F" & lMatch).Offset(0, 26).Value + " , " + .Range("F" & lMatch).Offset(0, 27).Value + " , " + .Range("F" & lMatch).Offset(0, 28).Value + " , " + .Range("F" & lMatch).Offset(0, 29).Value
            CbB51.Text = .Range("F" & lMatch).Offset(0, 30).Value
            TB52.Text = .Range("F" & lMatch).Offset(0, 31).Value
            TB53.Text = .Range("F" & lMatch).Offset(0, 32).Value + " , " + .Range("F" & lMatch).Offset(0, 33).Value + " , " + .Range("F" & lMatch).Offset(0, 34).Value + " , " + .Range("F" & lMatch).Offset(0, 35).Value
            TB61.Text = .Range("F" & lMatch).Offset(0, 36).Value
            CbB17.Text = .Range("F" & lMatch).Offset(0, 39).Value
            TB18.Text = .Range("F" & lMatch).Offset(0, 40).Text
            CommandButton1.Enabled = False
        Else
             MsgBox " ¡ÃسҾÔÁ¾ìÅӴѺ·Õè¡è͹ ËÃ×Í ÅӴѺ·ÕèäÁèÁÕã¹°Ò¹¢éÍÁÙÅ", vbExclamation, "°Ò¹¢éÍÁÙźؤ¤Å"
             CbB02.Text = ""
        End If
    End With
End Sub
Attachments
สมุดงาน2.xlsm
(233.99 KiB) Downloaded 31 times

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#14

by snasui » Tue Jun 04, 2013 3:35 pm

:D บรรทัดไหนมีการใช้ฟังก์ชั่น Match เข้ามาช่วยต้องเปลี่ยนทุกบรรทัดครับ

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#13

by yodpao.b » Tue Jun 04, 2013 3:25 pm

ขอบคุณครับ
ผมลองเปลียนตามที่อาจารย์บอก
จาก Code ด้านล่าง

Code: Select all

lMatch = Application.Match(CbB11.Value, rAll, 0)
เป็น Code นี้

Code: Select all

lMatch = Application.Match(CLng(CbB11.Text), rAll, 0)
ใช้ได้ดีครับ แต่เปลี่ยนบรรทัดนี้บรรทัดเดี๋ยวใช่ไหมครับ

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#12

by snasui » Tue Jun 04, 2013 2:07 pm

yodpao.b wrote: ที่อาจารย์พูดว่า " ยกเว้นเราสร้างตัวแปรให้กับ Object นั้นจึงไม่ต้องครอบด้วยเครื่องหมาย " "

ผมไม่เข้าใจครับอาจาร์ยแสดงตัวอย่างให้ดูหน่อยได้ไหมครับ
ด้านล่างเป็นโคดที่ใช้อยู่ครับ
ที่คุณไม่เข้าใจเพราะผมไม่เข้าใจว่าคุณถามอะไร ผมก็ตอบโดยทั่ว ๆ ไปครับ

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#11

by snasui » Tue Jun 04, 2013 2:01 pm

:D ก็เพราะว่ามันยังเป็น Text เช่นเดิมครับ ลอง Convert ให้เป็น Long โดยใช้ Clng เข้าไปครอบ จะได้เป็น

CLng(CbB11.Text)

ถ้าต้องการแก้ปัญหาควรถามว่าจะแก้อย่างไรเพื่อให้เป็นเช่นนั้นเช่นนี้มาด้วย หากถามแต่เพียงว่าเพราะอะไรก็อาจจะได้คำตอบแค่เพียงว่าเพราะอะไร เพราะถือว่าหากทราบว่าเพราะอะไรแล้วสามารถแก้ปัญหาเองได้ครับ
Attachments
ComboBox_Value.png
ComboBox_Value.png (10.87 KiB) Viewed 1032 times

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#10

by yodpao.b » Tue Jun 04, 2013 1:38 pm

Code: Select all

Private Sub CommandButton1_Click()

    Dim rAll As Range
    Dim lMatch As Long
    Dim lCountif As Long
    
    With Sheets("Variable")
        Set rAll = .Range("G:G")
        lCountif = Application.CountIf(rAll, CbB11.Value)
        If lCountif > 0 Then
            lMatch = Application.Match(CbB11.Value, rAll, 0)
            TB12.Text = .Range("G" & lMatch).Offset(0, 1)
            TB13.Text = .Range("G" & lMatch).Offset(0, 2)
            TB14.Text = .Range("G" & lMatch).Offset(0, 3)
            TB15.Text = .Range("G" & lMatch).Offset(0, 4)
            TB16.Text = .Range("G" & lMatch).Offset(0, 6)
        Else
             MsgBox " ¡ÃسҾÔÁ¾ìàÅ¢»ÃШӵÑÇ¡è͹ËÃ×ÍàÅ¢»ÃШӵÑÇäÁèÁÕã¹°Ò¹¢éÍÁÙÅ", vbExclamation, "°Ò¹¢éÍÁÙźؤ¤Å"
             CbB11.Value = ""
        End If
    End With
End Sub
ผมลองเปลี่ยนจาก TEXT เป็น Value แล้วครับ ผลที่ได้ยัง EEROR

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#9

by snasui » Tue Jun 04, 2013 12:41 pm

:D การที่โปรแกรม Error เนื่องจาก CbB11.Text ให้ค่าเป็น Text เมื่อนำไป Match กับ Number จึงเกิด Error ดูตัวอย่างประกอบด้านล่างครับ
Attachments
ObjectReturnString.png
ObjectReturnString.png (10.72 KiB) Viewed 1035 times

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#8

by yodpao.b » Tue Jun 04, 2013 11:24 am

snasui wrote::D การอ้างถึง Object ต้องใช้เครื่องหมาย " ครอบ ซึ่งต้องเป็นข้อความ ยกเว้นเราสร้างตัวแปรให้กับ Object นั้นจึงไม่ต้องครอบด้วยเครื่องหมาย " ครับ
เรียนอาจารย์ครับ จากไฟล์ที่แนบไป
Sheets("Variable")
Range("G:G")
นั้นเป็นตัวเลข จึงทำให้เวลารันโปรแกรม EEROR
แต่ถ้าผมทำให้เป็น จัดรุปแบบข้อความ โดยใส่เครื่องหมายคำพูด " ' " ก็จะสามารถ Run ได้

ที่อาจารย์พูดว่า " ยกเว้นเราสร้างตัวแปรให้กับ Object นั้นจึงไม่ต้องครอบด้วยเครื่องหมาย " "
ผมไม่เข้าใจครับอาจาร์ยแสดงตัวอย่างให้ดูหน่อยได้ไหมครับ
ด้านล่างเป็นโคดที่ใช้อยู่ครับ

Code: Select all

Private Sub CommandButton1_Click()

    Dim rAll As Range
    Dim lMatch As Long
    Dim lCountif As Long
    
    With Sheets("Variable")
        Set rAll = .Range("G:G")
        lCountif = Application.CountIf(rAll, CbB11.Text)
        If lCountif > 0 Then
            lMatch = Application.Match(CbB11.Text, rAll, 0)
            TB12.Text = .Range("G" & lMatch).Offset(0, 1)
            TB13.Text = .Range("G" & lMatch).Offset(0, 2)
            TB14.Text = .Range("G" & lMatch).Offset(0, 3)
            TB15.Text = .Range("G" & lMatch).Offset(0, 4)
            TB16.Text = .Range("G" & lMatch).Offset(0, 6)
        Else
             MsgBox " ¡ÃسҾÔÁ¾ìàÅ¢»ÃШӵÑÇ¡è͹ËÃ×ÍàÅ¢»ÃШӵÑÇäÁèÁÕã¹°Ò¹¢éÍÁÙÅ", vbExclamation, "°Ò¹¢éÍÁÙźؤ¤Å"
             CbB11.Text = ""
        End If
    End With
End Sub
Attachments
ค้นหาโดยVBAถ้าหาไม่เจอไม่ให้Error_Cobobox.xls
(48 KiB) Downloaded 22 times

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#7

by snasui » Tue Jun 04, 2013 6:34 am

:D การอ้างถึง Object ต้องใช้เครื่องหมาย " ครอบ ซึ่งต้องเป็นข้อความ ยกเว้นเราสร้างตัวแปรให้กับ Object นั้นจึงไม่ต้องครอบด้วยเครื่องหมาย " ครับ

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#6

by yodpao.b » Mon Jun 03, 2013 7:38 pm

เรียนอาจารย์ครับ
Sheets("S_Constant")
Range("B:B")
ทำไมถึงต้องเป็น ข้อความด้วยครับ
เป็นตัวเลขได้ไหมครับ
ผมลองแล้วมัน EEror ครับ

Re: ขอตัวอย่างการค้นหารายชื่อโดยใช้ VBA

#5

by yodpao.b » Sun Nov 11, 2012 8:17 pm

ทำได้แล้วครับ
ขอบคุณอาจาร์ยมากครับ

Top