Page 1 of 1

ป้อนข้อมูลที่ชีท1ให้ข้อมูลไปเก็บในตารางชีท3 ครับ

Posted: Thu Nov 14, 2013 2:41 am
by pongpang
:P ต้องการนำข้อมูลจากชีทที่ 1 วางในชีทที่ 3 (ตารางเก็บข้อมูล) โดยเมื่อป้อนข้อมูลในชีทที่1 และป้อนข้อมูลไม่เรียงตามลำดับเลขที่ ครั้งละ 1 เลขที่ เมื่อคลิกปุ่มข้อมูลจะนำไปวางในชีทที่3และจะสามารถสลับที่เรียงตามลำดับได้ ข้อมูลในเลขที่เดียวกันถ้าแก้ไขข้อมูลเสร็จเมื่อคลิกข้อมูลในเลขที่นั้นจะแก้ไขด้วย ครับ

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

Code: Select all

Sub PasteData()
    Dim irRange As Range
    Dim lngRowNum As Long
    Dim lngPosition As Long
    Dim lr As Long
     With Worksheets("sheet3").Application
        lngRowNum = .WorksheetFunction.CountIf(Range("b16:b" & Range("B65536").End(xlUp).Row), Range("c4"))
        If lngRowNum = 0 Then
            Sheets("sheet1").Range("c4:c8").Copy
            Sheets("sheet3").Range("B65536").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues, Transpose:=True
        Else
        With Worksheets("sheet3").Application
            lngPosition = .WorksheetFunction.Match(Range("c4"), Range("b16:b" & Range("b" & Rows.Count).End(xlUp).Row), 0)
            Sheets("sheet1").Range("c4:c8").Copy
            Sheets("sheet3").Range("B" & (15 + lngPosition)).PasteSpecial xlPasteValues, Transpose:=True
            End With
        End If
        With Worksheets("sheet3")
            lr = Range("B" & Rows.Count).End(xlUp).Row
            Set irRange = Sheets("sheet3").Range("b16:f" & lr)
            irRange.Sort Key1:=Sheets("sheet3").Range("b16"), Order1:=xlAscending, Header:=xlGuess
        End With
    End With
    
End Sub
ขอบคุณล่วงหน้าครับ

Re: ป้อนข้อมูลที่ชีท1ให้ข้อมูลไปเก็บในตารางชีท3 ครับ

Posted: Thu Nov 14, 2013 9:12 am
by snasui
:D ใน Sheet3 ลบค่าในบรรทัดที่ 27 ออกไปแล้วลองทดสอบดูใหม่ ในเครื่องผมไม่พบว่า Code มีปัญหา สามารถ Run ได้ตามปกติครับ

Re: ป้อนข้อมูลที่ชีท1ให้ข้อมูลไปเก็บในตารางชีท3 ครับ

Posted: Thu Nov 14, 2013 2:24 pm
by pongpang
ขอบคุณ คุณคนควน มากครับ ผมได้ปฏิบัติตามคำแนะนำแล้วครับ แต่
แต่ผลปรากฎว่า เมื่อทดลองป้อนข้อมูลตามลำดับเลขที่ คือ 10 9 5 8 เลขที่ 5 ถูกลบออกไป ดังภาพที่ 1 ครับ
1.png
และเมื่อป้อนข้อมูลต่อไป ตามเลขที่ 10 9 5 8 6 4 8 เลขที่ 5 ถูกลบออกไป และเมื่อแก้ไขข้อมูลของเลขที่ 8 จะนำไปบันทึกเป็น 2 แถว ครับ ตามภาพที่ 2 ครับ
ความต้องการ คือ ไม่ลบเลขที่ใด ๆ และแก้ไขข้อมูลไม่เก็บเป็น 2 แถว ต้องการให้เปลี่ยนเป็นข้อมูลใหม่ ครับ

Re: ป้อนข้อมูลที่ชีท1ให้ข้อมูลไปเก็บในตารางชีท3 ครับ

Posted: Thu Nov 14, 2013 5:13 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Sub PasteData()
    Dim irRange As Range
    Dim lngRowNum As Long
    Dim lngPosition As Long
    Dim lr As Long
    With Worksheets("sheet3")
        lngRowNum = Application.WorksheetFunction.CountIf(.Range("b16:b" & .Range("B65536").End(xlUp).Row), .Range("c4"))
        If lngRowNum = 0 Then
            Sheets("sheet1").Range("c4:c8").Copy
            Sheets("sheet3").Range("B65536").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues, Transpose:=True
        Else
        With Worksheets("sheet3")
            lngPosition = Application.WorksheetFunction.Match(.Range("c4"), .Range("b16:b" & .Range("b" & Rows.Count).End(xlUp).Row), 0)
            Sheets("sheet1").Range("c4:c8").Copy
            Sheets("sheet3").Range("B" & (15 + lngPosition)).PasteSpecial xlPasteValues, Transpose:=True
            End With
        End If
        With Worksheets("sheet3")
            lr = .Range("B" & Rows.Count).End(xlUp).Row
            Set irRange = Sheets("sheet3").Range("b16:f" & lr)
            irRange.Sort Key1:=Sheets("sheet3").Range("b16"), Order1:=xlAscending, Header:=xlGuess
        End With
    End With
End Sub
สังเกตภายใต้ With Worksheets("Sheet3") จะมีการใช้ .Range ไม่ใช่ Range

Re: ป้อนข้อมูลที่ชีท1ให้ข้อมูลไปเก็บในตารางชีท3 ครับ

Posted: Fri Nov 15, 2013 12:33 am
by pongpang
ขอบคุณ คุณคนควน มากครับ
ผมได้แก้ไขCode ตามที่แนะนำทุกประการแล้วครับ แต่ผลเป็นดังนี้ครับ
เมื่อป้อนข้อมูลต่อไป ตามเลขที่ 10 9 5 8 6 4 8เมื่อแก้ไขข้อมูลของเลขที่ 8 จะนำไปบันทึกเป็น 2 แถว ครับ ตามภาพ ครับ

Re: ป้อนข้อมูลที่ชีท1ให้ข้อมูลไปเก็บในตารางชีท3 ครับ

Posted: Fri Nov 15, 2013 6:11 am
by niwat2811
ผมลองทดสอบ Code ที่ท่านอาจารย์ให้มาก็ใช้ได้เป็นปกตินะครับ ถ้ายังไงลองตรวจสอบดูอีกครั้งครับ

Re: ป้อนข้อมูลที่ชีท1ให้ข้อมูลไปเก็บในตารางชีท3 ครับ

Posted: Fri Nov 15, 2013 11:51 am
by pongpang
ขอบคุณ คุณniwat2811
niwat2811 wrote:ผมลองทดสอบ Code ที่ท่านอาจารย์ให้มาก็ใช้ได้เป็นปกตินะครับ ถ้ายังไงลองตรวจสอบดูอีกครั้งครับ
ที่ช่วยตรวจสอบครับ แต่ลองอีกครั้งครับ ขอให้ลองตามภาพและดูไฟล์ด้วยครับ ถ้าได้ตามต้องการ คือ เมื่อบันทึกเลขที่เดิมซ้ำ ข้อมูลเลขที่นั้นต้องไม่มากกว่า 1 แถวครับ
ผล1.png

Re: ป้อนข้อมูลที่ชีท1ให้ข้อมูลไปเก็บในตารางชีท3 ครับ

Posted: Fri Nov 15, 2013 1:54 pm
by snasui
:D ลองปรับ Code ใหม่เป็นตามด้านล่างครับ

Code: Select all

Sub PasteData()
    Dim irRange As Range
    Dim lngRowNum As Long
    Dim lngPosition As Long
    Dim lr As Long
    With Worksheets("sheet3")
        lngRowNum = Application.WorksheetFunction.CountIf( _
            .Range("b16:b" & .Range("B65536").End(xlUp).Row), Sheets("Sheet1").Range("c4"))
        If lngRowNum = 0 Then
            Sheets("sheet1").Range("c4:c8").Copy
            Sheets("sheet3").Range("B65536").End(xlUp).Offset(1, 0) _
                .PasteSpecial xlPasteValues, Transpose:=True
        Else
        With Worksheets("sheet3")
            lngPosition = Application.WorksheetFunction.Match( _
                Sheets("Sheet1").Range("c4"), .Range("b16:b" & .Range("b" & Rows.Count) _
                .End(xlUp).Row), 0)
            Sheets("sheet1").Range("c4:c8").Copy
            Sheets("sheet3").Range("B" & (15 + lngPosition)) _
                .PasteSpecial xlPasteValues, Transpose:=True
            End With
        End If
        With Worksheets("sheet3")
            lr = .Range("B" & Rows.Count).End(xlUp).Row
            Set irRange = Sheets("sheet3").Range("b16:f" & lr)
            irRange.Sort Key1:=Sheets("sheet3").Range("b16"), _
                Order1:=xlAscending, Header:=xlGuess
        End With
    End With
End Sub

Re: ป้อนข้อมูลที่ชีท1ให้ข้อมูลไปเก็บในตารางชีท3 ครับ

Posted: Fri Nov 15, 2013 2:36 pm
by pongpang
ขอบคุณ คุณคนควน มาก ครับ
ได้ตรงตามความต้องการครับ ขอบคุณมากครับ