Page 1 of 1

code vba ตรวจสอบข้อมูลไม่ทำงาน

Posted: Mon Feb 10, 2014 9:06 pm
by tutape
เมื่อคีย์ข้อมูลใน form ช่องเลขที่บัญชี ค่าจะมาปรากฎใน sheet db_bank cell I2 และให้ตรวจสอบว่า มีเลขนี้แล้วยัง โดยเช็คจากคอลัมน์ A ถ้ามีแล้วให้ขึ้นกล่องโต้ตอบว่า "เลขซ้ำ" ถ้าไม่ซ้ำให้บันทึกได้ซึ่งผมลองเขียน code แล้ว พอรันแมโคร code ที่เขียนไม่ทำงานครับ
ซึ่งที่ผมลองเขียนดูเป็นดังนี้ครับ

Code: Select all

Private Sub cmdSave_click_Click()
Dim Lastrow As Integer
Sheets("db_bank").Select
    If Range("i1") = "" Then Exit Sub
    If Not Sheets("db_bank").Columns("A:A").Find(Range("i1"), LookIn:=xlValues) Is Nothing Then
            MsgBox "มีรหัสนี้แล้ว   ไม่สามารถบันทึกได้"
    Else
        Lastrow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Cells(1 + Lastrow, 1).Offset(0, 0).Value = Account_number.Value
        Cells(1 + Lastrow, 1).Offset(0, 1).Value = Account_Name.Value
        Cells(1 + Lastrow, 1).Offset(0, 2).Value = name_fark.Value
        Cells(1 + Lastrow, 1).Offset(0, 3).Value = tel.Value
        Cells(1 + Lastrow, 1).Offset(0, 4).Value = tel_home.Value
        Cells(1 + Lastrow, 1).Offset(0, 5).Value = bank_name.Value
        End If
        If Answer = vbYes Then
            MyNote = "ระบบบันทึกข้อมูลเรียบร้อยแล้ว"
            Answer = MsgBox(MyNote, vbQuestion, "บันทึกข้อมูล")
            Account_Name.Value = ""
        Account_number.Value = ""
        name_fark.Value = ""
        tel.Value = ""
        tel_home.Value = ""
        bank_name.Value = ""
        End If
        Sheets("title").Select
        Range("c4").Select
End Sub
ดังไฟล์ที่แนบครับ

รบกวนคนช่วยแนะนำด้วยครับ
ขอบคุณครับ

Re: code vba ตรวจสอบข้อมูลไม่ทำงาน

Posted: Mon Feb 10, 2014 9:32 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub Account_Name_Change()
    Sheets("db_bank").Range("i2").Value = Account_Name.Text
End Sub

'Private Sub Account_number_Change()
'     Sheets("db_bank").Range("I1").Value = Account_number.Value
'End Sub

Re: code vba ตรวจสอบข้อมูลไม่ทำงาน

Posted: Mon Feb 10, 2014 9:54 pm
by tutape
ทำได้แล้วครับ
แต่มีปัญหาต่งตรงที่ว่า เมื่อมี MsgBox ฟ้องว่า "มีรหัสนี้แล้ว ไม่สามารถบันทึกได้"
แต่เมื่อไปดูใน sheet จะทำเป็นฐานข้อมูล คือ db_bank ปรากฎว่ามีข้อมูลใหม่ บันทึกไปแล้วด้วย ทั้งๆ ที่ MsgBox ฟ้องว่า "มีรหัสนี้แล้ว ไม่สามารถบันทึกได้" ผมต้องปรับ code ตรงไหนหรือต้องเพิ่ม code อย่างไรครับ
ขอบคุณครับ

Re: code vba ตรวจสอบข้อมูลไม่ทำงาน

Posted: Mon Feb 10, 2014 10:07 pm
by snasui
:D หา Account_number_Change ใน Code ที่เขียนมาให้เจอครับ

จะเห็นว่าที่ผมโพสต์ไปด้านบนได้ Mark เป็น Comment และใช้ Code ชุดบนแทน

Re: code vba ตรวจสอบข้อมูลไม่ทำงาน

Posted: Mon Feb 10, 2014 11:15 pm
by tutape
ขอโทษครับ ผมยังหาไม่เจอเลย
และพยายามแกะการทำงานของ code แล้ว ก็ยังไม่ได้เลยครับ
รบกวนขอคำชี้แนะอีกครั้งครับ :P

Re: code vba ตรวจสอบข้อมูลไม่ทำงาน

Posted: Mon Feb 10, 2014 11:26 pm
by snasui
:shock: Code อยู่ใน UserForm ที่ชื่อ New_Data_Form ครับ

Re: code vba ตรวจสอบข้อมูลไม่ทำงาน

Posted: Tue Feb 11, 2014 8:33 am
by tutape
ได้แล้วครับ :cp:
แต่ยังไม่ได้ตามที่ตั้งใจไว้
คือ เมื่อมี MsgBox ฟ้องว่า "มีรหัสนี้แล้ว ไม่สามารถบันทึกได้" แล้วให้แก้ไขข้อมูลในช่อง เลขที่บัญชีใหม่ เมื่อแก้แล้วจะให้บันทึกข้อมูลให้เรียบร้อย
ผมยังปรับ code ไม่ได้ มันจะต้องเขียนเพิ่ม หรือใช้คำสั่งอื่นมาช่วย
รบกวนชี้แนะด้วยนะครับ โดย code ที่ผมปรับใหม่ คือ

Code: Select all

Private Sub cmdSave_click_Click()
Sheets("db_bank").Select
Sheets("db_bank").Range("I1").Value = Account_number.Value
Dim Lastrow As Integer
        If Range("i1") = "" Then Exit Sub
    If Not Sheets("db_bank").Columns("A:A").Find(Range("i1"), LookIn:=xlValues) Is Nothing Then
            MsgBox "มีรหัสนี้แล้ว   ไม่สามารถบันทึกได้"
    Else
        Lastrow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Cells(1 + Lastrow, 1).Offset(0, 0).Value = Account_number.Value
        Cells(1 + Lastrow, 1).Offset(0, 1).Value = Account_Name.Value
        Cells(1 + Lastrow, 1).Offset(0, 2).Value = name_fark.Value
        Cells(1 + Lastrow, 1).Offset(0, 3).Value = tel.Value
        Cells(1 + Lastrow, 1).Offset(0, 4).Value = tel_home.Value
        Cells(1 + Lastrow, 1).Offset(0, 5).Value = bank_name.Value
        End If
        If Answer = vbYes Then
            MyNote = "ระบบบันทึกข้อมูลเรียบร้อยแล้ว"
            Answer = MsgBox(MyNote, vbQuestion, "บันทึกข้อมูล")
            Account_Name.Value = ""
        Account_number.Value = ""
        name_fark.Value = ""
        tel.Value = ""
        tel_home.Value = ""
        bank_name.Value = ""
        End If
        Account_number.Value = ""  '[color=#BF0000]สั่งให้ลบข้อมูล  textBox  ชื่อ  Account_number[/color]
        Sheets("title").Select
        Range("c4").Select
End Sub
แล้วจะเขียน code ให้แก้ข้อมูลเฉพาะในช่อง Account_number เพื่อไม่ให้รหัสซ้ำ ส่วนช่องอื่นยังคงข้อมูลไว้ ผมจะต้องเขียน code ต่อจากบรรทัด
Account_number.Value = "" 'สั่งให้ลบข้อมูล textBox ชื่อ Account_number อย่างไรครับ
ที่ผมลอง คือ นำ code ด้านล่างนี้ในส่วนบนมาวางต่อท้ายบรรทัดดังกล่าว ปรากฎว่าก็ยังไม่ได้อย่างที่ตั้งใจไว้

Code: Select all

 Lastrow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Cells(1 + Lastrow, 1).Offset(0, 0).Value = Account_number.Value
        Cells(1 + Lastrow, 1).Offset(0, 1).Value = Account_Name.Value
        Cells(1 + Lastrow, 1).Offset(0, 2).Value = name_fark.Value
        Cells(1 + Lastrow, 1).Offset(0, 3).Value = tel.Value
        Cells(1 + Lastrow, 1).Offset(0, 4).Value = tel_home.Value
        Cells(1 + Lastrow, 1).Offset(0, 5).Value = bank_name.Value
        End If
        If Answer = vbYes Then
            MyNote = "ระบบบันทึกข้อมูลเรียบร้อยแล้ว"
            Answer = MsgBox(MyNote, vbQuestion, "บันทึกข้อมูล")
            Account_Name.Value = ""
        Account_number.Value = ""
        name_fark.Value = ""
        tel.Value = ""
        tel_home.Value = ""
        bank_name.Value = ""
        End If
รบกวนต่ออีกนะครับ
ผมเริ่มสนุกกับการเขียน vba แล้วละครับ แต่ต้องใช้ความพยายามสูงมากศึกษาข้อมูลเยอะมาทีเดียว
ขอบคุณความรู้ที่อาจารย์ให้มาครับ

Re: code vba ตรวจสอบข้อมูลไม่ทำงาน

Posted: Tue Feb 11, 2014 9:01 am
by snasui
:D เมื่อเตือนแล้วให้ลบค่าใน Control เป้าหมายด้วย ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

'...
If Not Sheets("db_bank").Columns("A:A").Find(Range("i1"), LookIn:=xlValues) Is Nothing Then
    MsgBox "มีรหัสนี้แล้ว   ไม่สามารถบันทึกได้"
    Account_number.Value = "" '<== add this line
'...

Re: code vba ตรวจสอบข้อมูลไม่ทำงาน

Posted: Tue Feb 11, 2014 7:56 pm
by tutape
ขอบคุณสำหรับคำแนะนำครับ นำมาใช้เป็นแนวทางในการปรับปรุง code ได้แล้วครับ