: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

เป็นCode สำหรับใช้บันทึกข้อมูล

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

เป็นCode สำหรับใช้บันทึกข้อมูล

#1

Post by pongpang »

เป็นCode สำหรับใช้บันทึกข้อมูล

Code: Select all

Private Sub CommandButton1_Click()
Dim rAll As Range, r As Range
    With Sheets("sheet1")
        Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
        For Each r In rAll
            If CStr(r) = ComboBox1.Text Then
                r.Offset(0, 1) = TextBox1.Text
                r.Offset(0, 2) = TextBox2.Text
                r.Offset(0, 3) = TextBox3.Text
                r.Offset(0, 4) = TextBox4.Text
               
                Exit For
            End If
        Next r
    End With
End Sub
ผลที่ได้รับ
จุดเด่น ถ้าต้องปรับปรุงข้อมูลเก่าสามารถปรับปรุงลงในตำแหน่งเดิมได้
จุดอ่อนที่ต้องปรับปรุง
การบันทึกช้อมูลใหม่(เพิ่มข้อมูล) ถ้าไม่พิมพ์เลขที่สมาชิกลงในตารางไว้ล่วงหน้า
ไม่สามารถคลิกเพิ่มข้อมูลได้

ความต้องการ1 ไม่ต้องพิมพ์เลขที่สมาชิกในตารางไว้ล่วงหน้าก็ให้สามารถบันทึกข้อมูลได้
ขอความกรุณา แก้ไขปรับปรุงให้ด้วยครับ
ความต้องการ2 กำหนดให้TEXTBOX แสดงค่าเป็นรูปแบบ d/mm/yy
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เป็นCode สำหรับใช้บันทึกข้อมูล

#2

Post by snasui »

:D Code ที่แนบมาเป็นการแก้ไขข้อมูลเก่าเท่านั้น

ทุกจุดอ่อนที่ถามให้พยายามเขียนแก้มาเองก่อนและต้องเป็นเช่นนี้ทุกครั้ง ติดแล้วค่อยถามกันต่อครับ
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: เป็นCode สำหรับใช้บันทึกข้อมูล

#3

Post by pongpang »

เรียน อาจารย์ คนควน
ได้พยายามแล้วครับ แต่เมื่อแก้ไขข้อมูลเก่าหรือเพิ่มข้อมูลจะเกิด ดีบัก ตามภาพครับ
AXY1.png
AXY.png

Code: Select all

Private Sub CommandButton1_Click()
    Dim rAll As Range, r As Range
    Set ws = Worksheets("sheet1")
    With ws
        Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
        For Each r In rAll
            If CStr(r) = ComboBox1.Text Then
                r.Offset(0, 1) = TextBox1.Text
                r.Offset(0, 2) = TextBox2.Text
                r.Offset(0, 3) = TextBox3.Text
                r.Offset(0, 4) = TextBox4.Text
                ComboBox1.Text = ""
                 TextBox1.Text = ""
                 TextBox2.Text = ""
                 TextBox3.Text = ""
                 TextBox4.Text = ""
              ElseIf CStr(r) <> ComboBox1.Text Then
                Irow = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row + 1
                ws.Cells(Rows, 1).Value = ComboBox1.Text
                 ws.Cells(Rows, 2).Value = TextBox1.Text
                 ws.Cells(Rows, 3).Value = TextBox2.Text
                 ws.Cells(Rows, 4).Value = TextBox3.Text
                 ws.Cells(Rows, 5).Value = TextBox4.Text
                 ComboBox1.Text = ""
                 TextBox1.Text = ""
                 TextBox2.Text = ""
                 TextBox3.Text = ""
                 TextBox4.Text = ""
                Exit For
            End If
        Next r
    End With
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: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เป็นCode สำหรับใช้บันทึกข้อมูล

#4

Post by snasui »

:D จาก ws.Cells(Rows, 1).Value = ComboBox1.Text ควรเป็น ws.Cells(Irow, 1).Value = ComboBox1.Text รวมทั้งตัวอื่น ๆ ก็เช่นเดียวกัน

่ส่วน IRow ควรจะมีค่าเท่ากับบรรทัดหลังบรรทัดที่มีข้อมูลคือ Irow = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: เป็นCode สำหรับใช้บันทึกข้อมูล

#5

Post by pongpang »

เรียน อาจารย์
ผมได้ปรับปรุง Code บางส่วน จนสามารถลงในคอลัมน์ได้ตามต้อง แต่มีบางส่วน ยังคงมีความต้องการและปัญหา ดังนี้
ความต้องการ เมื่อแก้ไขข้อมูลเก่าให้นำข้อมูลวางที่ Row เดิม
ถ้าเพิ่มข้อมูล นำข้อมูลต่อที่Rowล่าง
ผลของ Code
ถ้าแก้ไขเช่น แก้ไข นามสกุลของเลขที่ 1,3,4 จะไม่วางข้อมูลทับของเลขที่เดิม จะนำข้อมูลไปต่อข้างล่าง และไม่แก้ไขตามที่คีย์
1.จากCode ข้างล่างต้องแก้ไขที่ส่วนใด
2.การกำหนดให้ Text แสดงข้อมูลวันเดือนปี เป็นวันเดือนปี
ต้องดำเนินการอย่างไร ครับ

Code: Select all

Private Sub CommandButton1_Click()
    Dim rAll As Range, r As Range
    Set ws = Worksheets("sheet1")
    With ws
        Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
        For Each r In rAll
            If CStr(r) = ComboBox1.Text Then
                r.Offset(0, 1) = TextBox1.Text
                r.Offset(0, 2) = TextBox2.Text
                r.Offset(0, 3) = TextBox3.Text
                r.Offset(0, 4) = TextBox4.Text
                ComboBox1.Text = ""
                 TextBox1.Text = ""
                 TextBox2.Text = ""
                 TextBox3.Text = ""
                 TextBox4.Text = ""
              ElseIf CStr(r) <> ComboBox1.Text Then
                'Irow = Sheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row + 1
                Irow = Sheets("sheet1").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
                'ws.Cells(Rows, 1).Value = ComboBox1.Text
                ws.Cells(Irow, 2).Value = ComboBox1.Text
                 ws.Cells(Irow, 3).Value = TextBox1.Text
                 ws.Cells(Irow, 4).Value = TextBox2.Text
                 ws.Cells(Irow, 5).Value = TextBox3.Text
                 ws.Cells(Irow, 6).Value = TextBox4.Text
                 ComboBox1.Text = ""
                 TextBox1.Text = ""
                 TextBox2.Text = ""
                 TextBox3.Text = ""
                 TextBox4.Text = ""
                Exit For
            End If
        Next r
    End With
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: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เป็นCode สำหรับใช้บันทึกข้อมูล

#6

Post by snasui »

:D ตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Private Sub ComboBox1_Change()
    On Error Resume Next
    Set myRange = Worksheets("sheet1").Range("num")
    With Application.WorksheetFunction
'        ComboBox1.Value = .VLookup(CLng(ComboBox1.Text), myRange, 1, False)
        TextBox1.Text = .VLookup(CLng(ComboBox1.Text), Range("data"), 2, False)
        TextBox2.Text = .VLookup(CLng(ComboBox1.Text), Range("data"), 3, False)
        TextBox3.Text = .Text(.VLookup(CLng(ComboBox1.Text), Range("data"), 4, False), "dd/mm/yyyy")
        TextBox4.Text = .VLookup(CLng(ComboBox1.Text), Range("data"), 5, False)
    End With
End Sub


Private Sub CommandButton1_Click()
    Dim rAll As Range, r As Range
    Dim iRow As Long
    Set ws = Worksheets("sheet1")
    With ws
        Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
        If Application.CountIf(rAll, ComboBox1.Text) > 0 Then
            iRow = Application.Match(CLng(ComboBox1.Text), .Range("b:b"), 0)
        Else
            iRow = .Range(rAll.Rows.Count).Row + 1
        End If
        ws.Cells(iRow, 3).Value = TextBox1.Text
        ws.Cells(iRow, 4).Value = TextBox2.Text
        ws.Cells(iRow, 5).Value = Application.Text(TextBox3.Text, "dd/mm/yyyy")
        ws.Cells(iRow, 6).Value = TextBox4.Text
        ws.Cells(iRow, 2).Value = ComboBox1.Text
        ComboBox1.Text = ""
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox4.Text = ""
    End With
End Sub
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: เป็นCode สำหรับใช้บันทึกข้อมูล

#7

Post by pongpang »

เรียน อาจารย์คนควน
ขอบคุณมากครับที่ได้กรุณา สำหรับCode ได้นำไปใช้แล้ว แต่เกิดปัญหา ดังนี้
1.เมื่อต้องการป้อนข้อมูลเพิ่มเมื่อเริ่มคีย์เลขประจำตัว เช่น คีย์เลข 12 ก็จะแสดงข้อมูลของเลขที่ 1 ครับ
2.เมื่อป้อนข้อมูลในฟอร์มเสร็จ คลิกปุ่มเพิ่ม/ปรับปรุง จะเกิดดีบั๊ก ตามภาพครับ
011.png

Code: Select all

Private Sub CommandButton1_Click()
    Dim rAll As Range, r As Range
    Dim iRow As Long
    Set ws = Worksheets("sheet1")
    With ws
        Set rAll = .Range("b3", .Range("b" & Rows.Count).End(xlUp))
        If Application.CountIf(rAll, ComboBox1.Text) > 0 Then
            iRow = Application.Match(CLng(ComboBox1.Text), .Range("b:b"), 0)
        Else
            iRow = .Range(rAll.Rows.Count).Row + 1
        End If
        ws.Cells(iRow, 3).Value = TextBox1.Text
        ws.Cells(iRow, 4).Value = TextBox2.Text
        ws.Cells(iRow, 5).Value = Application.Text(TextBox3.Text, "dd/mm/yyyy")
        ws.Cells(iRow, 6).Value = TextBox4.Text
        ws.Cells(iRow, 2).Value = ComboBox1.Text
        ComboBox1.Text = ""
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox4.Text = ""
    End With
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: 31257
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: เป็นCode สำหรับใช้บันทึกข้อมูล

#8

Post by snasui »

:D บรรทัดที่ Error ลองปรับเป็น

Code: Select all

iRow = rAll(rAll.Rows.Count).Row + 1
ส่วนการที่คีย์ค่าใน ComboBox แล้วมีการ Lookup เอาค่าเฉพาะหลักแรกมาให้เป็นเพราะคุณเขียนให้ Check การเปลี่ยนแปลงของ ComboBox ซึ่งจะต้องแก้มาเอง

จาก ComboBox1_Change() หมายถึง Code ที่อยู่ภายใน Procedure นี้จะทำงานทุกครั้งทีมีการเปลียนแปลงใน ComboBox1 ทุกการคีย์จะเกิดกระทบกับ Event นี้เสมอ เมื่อคีย์ 1 ก็จะไปดึงค่าที่เกียวกับ 1 มาแสดง หากคีย์คีย์ตัวถัดมาแม้จะไม่สามารถ Lookup ค่ามาได้ก็จะยังแสดงค่าเดิมเพราะไปกำหนด On error resume next เอาไว้

การใช้งานของ ComboBox เน้นที่ให้เลือกจากค่าที่มี ไม่ใช่ให้คีย์เข้าไปเอง หากต้องการให้เลือกได้ คีย์เข้าไปเองด้วยก็ต้องปรับ Code เดิมมาครับ
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: เป็นCode สำหรับใช้บันทึกข้อมูล

#9

Post by pongpang »

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