Page 1 of 2

ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมาก

Posted: Thu Jul 24, 2014 5:11 pm
by sakajohn
สวัสดีครับ

ผมสร้างฟอร์มกรอกข้อมูลใน sheet "แก้ไขราคา" เมื่อเรากดปุ่มบันทึก ค่าก็จะถูกบันทึกที่ Sheet "Data1" โดยจะต้องเรียงลำดับจากน้อยไปมาก ตอนนี้ผมเขียนโค๊ต คือมันจะเรียงจากน้อยไปมากแค่ 2 แถวแรก เมื่อบันทึกเพิ่มแถวที่ 3 มันจะไม่เรียงแล้วครับ

จะต้องแก้ไขยังไงครับ

Code: Select all

Private Sub cmdEdite_Click()

If Application.CountA(Range("N12")) = 0 Then
        MsgBox "กรุณาใส่ราคา"
    Exit Sub
End If

Dim rg As Range

Set rg = Range("i4")

rg.Activate
If rg.Value = "" Then Exit Sub
If IsDuplicate(rg.Value) Then
    MsgBox "ข้อมูลซ้ำเรียกหัวหน้าแก้ไข", vbCritical
    Exit Sub
End If

With Worksheets("DATA1")
    With .Range("a" & Rows.Count).End(xlUp).Offset(1, 0)
      .Offset(0, 0).Value = rg.Offset(0, 0).Value 'เลขที่เอกสาร
        .Offset(0, 1).Value = rg.Offset(0, 5).Value 'วันที่
        .Offset(0, 2).Value = rg.Offset(0, -5).Value 'ชื่อบริษัท
        .Offset(0, 3).Value = rg.Offset(2, -5).Value 'ชื่อผู้ติดต่อ
        .Offset(0, 4).Value = rg.Offset(4, -5).Value 'เบอร์โทรลูกค้า
        .Offset(0, 5).Value = rg.Offset(2, 0).Value 'ชื่อฝ่ายขาย
        .Offset(0, 6).Value = rg.Offset(4, 0).Value 'เบอร์โทรฝ่ายขาย
        .Offset(0, 7).Value = rg.Offset(2, 5).Value 'REV
        .Offset(0, 8).Value = rg.Offset(8, -7).Value 'รายการที่
        .Offset(0, 9).Value = rg.Offset(8, -5).Value 'รายการ
        .Offset(0, 10).Value = rg.Offset(8, 0).Value 'ขนาด
        .Offset(0, 11).Value = rg.Offset(8, 1).Value 'ขนาด
        .Offset(0, 12).Value = rg.Offset(10, -4).Value 'วัตถุดิบ
        .Offset(0, 13).Value = rg.Offset(10, 5).Value 'ราคาวัตถุดิบ
        .Offset(0, 14).Value = rg.Offset(12, -3).Value 'เคลือบ
        .Offset(0, 15).Value = rg.Offset(13, 3).Value 'ราคาเคลือบ
        .Offset(0, 16).Value = rg.Offset(12, -1).Value 'งานพิเศษ
        .Offset(0, 17).Value = rg.Offset(13, 5).Value 'ราคางานพิเศษ
        .Offset(0, 18).Value = rg.Offset(12, -5).Value 'สี
        .Offset(0, 19).Value = rg.Offset(8, 3).Value 'จำนวน1
        .Offset(0, 20).Value = rg.Offset(8, 4).Value 'ราคา1
        .Offset(0, 21).Value = rg.Offset(10, 3).Value 'จำนวน2
        .Offset(0, 22).Value = rg.Offset(10, 4).Value 'ราคา2
        .Offset(0, 23).Value = rg.Offset(12, 3).Value 'จำนวน3
        .Offset(0, 24).Value = rg.Offset(12, 4).Value 'ราคา3
        .Offset(0, 25).Value = rg.Offset(8, 5).Value 'หมายเหตุ1
        .Offset(0, 26).Value = rg.Offset(15, -7).Value 'รายการที่2
        .Offset(0, 27).Value = rg.Offset(15, -5).Value 'รายการ2
        .Offset(0, 28).Value = rg.Offset(15, 0).Value 'ขนาด2
        .Offset(0, 29).Value = rg.Offset(15, 2).Value 'ขนาด2
        .Offset(0, 30).Value = rg.Offset(17, -4).Value 'วัตถุดิบ2
        .Offset(0, 31).Value = rg.Offset(17, 5).Value 'ราคาวัตถุดิบ2
        .Offset(0, 32).Value = rg.Offset(19, -3).Value 'เคลือบ2
        .Offset(0, 33).Value = rg.Offset(20, 3).Value 'ราคาเคลือบ2
        .Offset(0, 34).Value = rg.Offset(19, -1).Value 'งานพิเศษ2
        .Offset(0, 35).Value = rg.Offset(20, 5).Value 'ราคางานพิเศษ2
        .Offset(0, 36).Value = rg.Offset(19, -5).Value 'สี2
        .Offset(0, 37).Value = rg.Offset(15, 3).Value 'จำนวน1
        .Offset(0, 38).Value = rg.Offset(15, 4).Value 'ราคา1
        .Offset(0, 39).Value = rg.Offset(17, 3).Value 'จำนวน2
        .Offset(0, 40).Value = rg.Offset(17, 4).Value 'ราคา2
        .Offset(0, 41).Value = rg.Offset(19, 3).Value 'จำนวน3
        .Offset(0, 42).Value = rg.Offset(19, 4).Value 'ราคา3
        .Offset(0, 43).Value = rg.Offset(15, 5).Value 'หมายเหตุ2
        .Offset(0, 44).Value = rg.Offset(22, -7).Value 'รายการที่3
        .Offset(0, 45).Value = rg.Offset(22, -5).Value 'รายการ3
        .Offset(0, 46).Value = rg.Offset(22, 0).Value 'ขนาด3
        .Offset(0, 47).Value = rg.Offset(22, 8).Value 'ขนาด3
        .Offset(0, 48).Value = rg.Offset(24, -4).Value 'วัตถุดิบ3
        .Offset(0, 49).Value = rg.Offset(24, 5).Value 'ราคาวัตถุดิบ3
        .Offset(0, 50).Value = rg.Offset(26, -3).Value 'เคลือบ3
        .Offset(0, 51).Value = rg.Offset(27, 3).Value 'เคลือบ3
        .Offset(0, 52).Value = rg.Offset(26, -1).Value 'งานพิเศษ3
        .Offset(0, 53).Value = rg.Offset(27, 5).Value 'ราคางานพิเศษ3
        .Offset(0, 54).Value = rg.Offset(26, -5).Value 'สี3
        .Offset(0, 55).Value = rg.Offset(22, 3).Value 'จำนวน1
        .Offset(0, 56).Value = rg.Offset(22, 4).Value 'ราคา1
        .Offset(0, 57).Value = rg.Offset(24, 3).Value 'จำนวน2
        .Offset(0, 58).Value = rg.Offset(24, 4).Value 'จำนวน2
        .Offset(0, 59).Value = rg.Offset(26, 3).Value 'จำนวน3
        .Offset(0, 60).Value = rg.Offset(26, 4).Value 'ราคา3
        .Offset(0, 61).Value = rg.Offset(22, 5).Value 'หมายเหตุ3
        .Offset(0, 62).Value = rg.Offset(29, -7).Value 'รายการที่4
        .Offset(0, 63).Value = rg.Offset(29, -5).Value 'รายการ4
        .Offset(0, 64).Value = rg.Offset(29, 0).Value 'ขนาด4
        .Offset(0, 65).Value = rg.Offset(29, 8).Value 'ขนาด4
        .Offset(0, 66).Value = rg.Offset(31, -4).Value 'วัตถุดิบ4
        .Offset(0, 67).Value = rg.Offset(31, 5).Value 'ราคาวัตถุดิบ4
        .Offset(0, 68).Value = rg.Offset(33, -3).Value 'เคลือบ4
        .Offset(0, 69).Value = rg.Offset(34, 3).Value 'ราคาเคลือบ4
        .Offset(0, 70).Value = rg.Offset(33, -1).Value 'งานพิเศษ4
        .Offset(0, 71).Value = rg.Offset(34, 5).Value 'ราคางานพิเศษ4
        .Offset(0, 72).Value = rg.Offset(33, -5).Value 'สี4
        .Offset(0, 73).Value = rg.Offset(29, 3).Value 'จำนวน1
        .Offset(0, 74).Value = rg.Offset(29, 4).Value 'ราคา1
        .Offset(0, 75).Value = rg.Offset(31, 3).Value 'จำนวน2
        .Offset(0, 76).Value = rg.Offset(31, 4).Value 'ราคา2
        .Offset(0, 77).Value = rg.Offset(33, 3).Value 'จำนวน3
        .Offset(0, 78).Value = rg.Offset(33, 4).Value 'ราคา3
        .Offset(0, 79).Value = rg.Offset(29, 5).Value 'หมายเหตุ4
        .Offset(0, 80).Value = rg.Offset(36, -7).Value 'รายการที่5
        .Offset(0, 81).Value = rg.Offset(36, -5).Value 'รายการ5
        .Offset(0, 82).Value = rg.Offset(36, 0).Value 'ขนาด5
        .Offset(0, 83).Value = rg.Offset(36, 8).Value 'ขนาด5
        .Offset(0, 84).Value = rg.Offset(38, -4).Value 'วัตถุดิบ5
        .Offset(0, 85).Value = rg.Offset(38, 5).Value 'ราคาวัตถุดิบ5
        .Offset(0, 86).Value = rg.Offset(40, -3).Value 'เคลือบ5
        .Offset(0, 87).Value = rg.Offset(41, 3).Value 'ราคาเคลือบ5
        .Offset(0, 88).Value = rg.Offset(40, -1).Value 'งานพิเศษ5
        .Offset(0, 89).Value = rg.Offset(41, 5).Value 'ราคางานพิเศษ5
        .Offset(0, 90).Value = rg.Offset(40, -5).Value 'สี5
        .Offset(0, 91).Value = rg.Offset(36, 3).Value 'จำนวน1
        .Offset(0, 92).Value = rg.Offset(36, 4).Value 'ราคา1
        .Offset(0, 93).Value = rg.Offset(38, 3).Value 'จำนวน2
        .Offset(0, 94).Value = rg.Offset(38, 4).Value 'ราคา2
        .Offset(0, 95).Value = rg.Offset(40, 3).Value 'จำนวน3
        .Offset(0, 96).Value = rg.Offset(40, 4).Value 'ราคา3
        .Offset(0, 97).Value = rg.Offset(36, 5).Value 'หมายเหตุ5
        End With
    End With
    Range("n12,N14,N16,N19,N21,n23,n26,n28,n30,n33,n35,n37,n40,n42,n44").ClearContents
    Sheets("DATA1").Select
    ActiveWorkbook.Worksheets("DATA1").sort.SortFields.Clear
    ActiveWorkbook.Worksheets("DATA1").sort.SortFields.Add Key:=Range("A4"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("DATA1").sort
        .SetRange Range("A4:CT5")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Sheets("ออกใบเสนอราคางาน").Select
End Sub

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Thu Jul 24, 2014 5:59 pm
by snasui
:D ลองปรับบางส่วนของ Code เป็นตามด้านล่างครับ

Code: Select all

...
With ActiveWorkbook.Worksheets("DATA1").sort
     .SetRange Range("A4", Range("CT" & Rows.count).End(xlUp))
     .Header = xlNo
     .MatchCase = False
     .Orientation = xlTopToBottom
     .SortMethod = xlPinYin
     .Apply
End With
...
ควรแนบตัวอย่างไฟล์มาด้วยจะได้เห็นว่าข้อมูลเป็นอย่างไร เพื่อจะได้ตอบได้ตรงประเด็นมากกว่าอ่านจาก Code แต่เพียงอย่างเดียวครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Fri Jul 25, 2014 9:30 am
by sakajohn
ผมส่งไฟล์มาเพิ่มเติมแล้วครับ ตอนนี้ปัญหาคือ เวลากดบันทึกมันจะไปเรียงอยู่เหนือแถวที่กำหนดเป็นหัวข้อเรื่องครับ
อยู่ใน Procedure "แก้ไขราคา" ครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Fri Jul 25, 2014 7:05 pm
by snasui
:D ลองปรับ Code เป็นด้านล่างครับ โดยเครื่องหมาย ... คือ Code อื่นที่ไม่ต้องปรับ

Code: Select all

...
Dim rSort As Range
Dim sortField As Range
...
Set rSort = Sheets("DATA1").Range("a1").CurrentRegion
Set sortField = rSort.Offset(1, 0).Resize(, 1)
ActiveWorkbook.Worksheets("DATA1").sort.SortFields.Clear
ActiveWorkbook.Worksheets("DATA1").sort.SortFields.Add Key:=sortField, _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("DATA1").sort
    .SetRange rSort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
...

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Mon Jul 28, 2014 8:48 am
by sakajohn
ผมได้ลองแก้ไขโค๊ตตามที่อาจารย์แนะนำครับ แต่มันก็ยังไม่เรียงลำดับครับ ผมไม่แน่ใจว่าวางโค๊ตผิดตำแหน่งหรือเปล่าครับ ขอให้อาจารย์ช่วยแนะนำอีกครั้งครับ ขอบคุณครับ

Code: Select all

Private Sub cmdEdite_Click()

If Application.CountA(Range("N12")) = 0 Then
        MsgBox "¡ÃسÒãÊèÃÒ¤Ò"
    Exit Sub
End If

Dim rSort As Range
Dim sortField As Range

Dim rg As Range

Set rg = Range("i4")

rg.Activate
If rg.Value = "" Then Exit Sub
If IsDuplicate(rg.Value) Then
    MsgBox "¢éÍÁÙÅ«éÓàÃÕ¡ËÑÇ˹éÒá¡éä¢", vbCritical
    Exit Sub
End If

With Worksheets("DATA1")
    With .Range("a" & Rows.Count).End(xlUp).Offset(1, 0)
      .Offset(0, 0).Value = rg.Offset(0, 0).Value 'àÅ¢·ÕèàÍ¡ÊÒÃ
        .Offset(0, 1).Value = rg.Offset(0, 5).Value 'Çѹ·Õè
        .Offset(0, 2).Value = rg.Offset(0, -5).Value 'ª×èͺÃÔÉÑ·
        .Offset(0, 3).Value = rg.Offset(2, -5).Value 'ª×èͼÙéµÔ´µèÍ
        .Offset(0, 4).Value = rg.Offset(4, -5).Value 'àºÍÃìâ·ÃÅÙ¡¤éÒ
        .Offset(0, 5).Value = rg.Offset(2, 0).Value 'ª×èͽèÒ¢ÒÂ
        .Offset(0, 6).Value = rg.Offset(4, 0).Value 'àºÍÃìâ·Ã½èÒ¢ÒÂ
        .Offset(0, 7).Value = rg.Offset(2, 5).Value 'REV
        .Offset(0, 8).Value = rg.Offset(8, -7).Value 'ÃÒ¡Ò÷Õè
        .Offset(0, 9).Value = rg.Offset(8, -5).Value 'ÃÒ¡ÒÃ
        .Offset(0, 10).Value = rg.Offset(8, 0).Value '¢¹Ò´
        .Offset(0, 11).Value = rg.Offset(8, 1).Value '¢¹Ò´
        .Offset(0, 12).Value = rg.Offset(10, -4).Value 'Çѵ¶Ø´Ôº
        .Offset(0, 13).Value = rg.Offset(10, 5).Value 'ÃÒ¤ÒÇѵ¶Ø´Ôº
        .Offset(0, 14).Value = rg.Offset(12, -3).Value 'à¤Å×ͺ
        .Offset(0, 15).Value = rg.Offset(13, 3).Value 'ÃÒ¤Òà¤Å×ͺ
        .Offset(0, 16).Value = rg.Offset(12, -1).Value '§Ò¹¾ÔàÈÉ
        .Offset(0, 17).Value = rg.Offset(13, 5).Value 'ÃÒ¤Ò§Ò¹¾ÔàÈÉ
        .Offset(0, 18).Value = rg.Offset(12, -5).Value 'ÊÕ
        .Offset(0, 19).Value = rg.Offset(8, 3).Value '¨Ó¹Ç¹1
        .Offset(0, 20).Value = rg.Offset(8, 4).Value 'ÃÒ¤Ò1
        .Offset(0, 21).Value = rg.Offset(10, 3).Value '¨Ó¹Ç¹2
        .Offset(0, 22).Value = rg.Offset(10, 4).Value 'ÃÒ¤Ò2
        .Offset(0, 23).Value = rg.Offset(12, 3).Value '¨Ó¹Ç¹3
        .Offset(0, 24).Value = rg.Offset(12, 4).Value 'ÃÒ¤Ò3
        .Offset(0, 25).Value = rg.Offset(8, 5).Value 'ËÁÒÂà˵Ø1
        .Offset(0, 26).Value = rg.Offset(15, -7).Value 'ÃÒ¡Ò÷Õè2
        .Offset(0, 27).Value = rg.Offset(15, -5).Value 'ÃÒ¡ÒÃ2
        .Offset(0, 28).Value = rg.Offset(15, 0).Value '¢¹Ò´2
        .Offset(0, 29).Value = rg.Offset(15, 2).Value '¢¹Ò´2
        .Offset(0, 30).Value = rg.Offset(17, -4).Value 'Çѵ¶Ø´Ôº2
        .Offset(0, 31).Value = rg.Offset(17, 5).Value 'ÃÒ¤ÒÇѵ¶Ø´Ôº2
        .Offset(0, 32).Value = rg.Offset(19, -3).Value 'à¤Å×ͺ2
        .Offset(0, 33).Value = rg.Offset(20, 3).Value 'ÃÒ¤Òà¤Å×ͺ2
        .Offset(0, 34).Value = rg.Offset(19, -1).Value '§Ò¹¾ÔàÈÉ2
        .Offset(0, 35).Value = rg.Offset(20, 5).Value 'ÃÒ¤Ò§Ò¹¾ÔàÈÉ2
        .Offset(0, 36).Value = rg.Offset(19, -5).Value 'ÊÕ2
        .Offset(0, 37).Value = rg.Offset(15, 3).Value '¨Ó¹Ç¹1
        .Offset(0, 38).Value = rg.Offset(15, 4).Value 'ÃÒ¤Ò1
        .Offset(0, 39).Value = rg.Offset(17, 3).Value '¨Ó¹Ç¹2
        .Offset(0, 40).Value = rg.Offset(17, 4).Value 'ÃÒ¤Ò2
        .Offset(0, 41).Value = rg.Offset(19, 3).Value '¨Ó¹Ç¹3
        .Offset(0, 42).Value = rg.Offset(19, 4).Value 'ÃÒ¤Ò3
        .Offset(0, 43).Value = rg.Offset(15, 5).Value 'ËÁÒÂà˵Ø2
        .Offset(0, 44).Value = rg.Offset(22, -7).Value 'ÃÒ¡Ò÷Õè3
        .Offset(0, 45).Value = rg.Offset(22, -5).Value 'ÃÒ¡ÒÃ3
        .Offset(0, 46).Value = rg.Offset(22, 0).Value '¢¹Ò´3
        .Offset(0, 47).Value = rg.Offset(22, 8).Value '¢¹Ò´3
        .Offset(0, 48).Value = rg.Offset(24, -4).Value 'Çѵ¶Ø´Ôº3
        .Offset(0, 49).Value = rg.Offset(24, 5).Value 'ÃÒ¤ÒÇѵ¶Ø´Ôº3
        .Offset(0, 50).Value = rg.Offset(26, -3).Value 'à¤Å×ͺ3
        .Offset(0, 51).Value = rg.Offset(27, 3).Value 'à¤Å×ͺ3
        .Offset(0, 52).Value = rg.Offset(26, -1).Value '§Ò¹¾ÔàÈÉ3
        .Offset(0, 53).Value = rg.Offset(27, 5).Value 'ÃÒ¤Ò§Ò¹¾ÔàÈÉ3
        .Offset(0, 54).Value = rg.Offset(26, -5).Value 'ÊÕ3
        .Offset(0, 55).Value = rg.Offset(22, 3).Value '¨Ó¹Ç¹1
        .Offset(0, 56).Value = rg.Offset(22, 4).Value 'ÃÒ¤Ò1
        .Offset(0, 57).Value = rg.Offset(24, 3).Value '¨Ó¹Ç¹2
        .Offset(0, 58).Value = rg.Offset(24, 4).Value '¨Ó¹Ç¹2
        .Offset(0, 59).Value = rg.Offset(26, 3).Value '¨Ó¹Ç¹3
        .Offset(0, 60).Value = rg.Offset(26, 4).Value 'ÃÒ¤Ò3
        .Offset(0, 61).Value = rg.Offset(22, 5).Value 'ËÁÒÂà˵Ø3
        .Offset(0, 62).Value = rg.Offset(29, -7).Value 'ÃÒ¡Ò÷Õè4
        .Offset(0, 63).Value = rg.Offset(29, -5).Value 'ÃÒ¡ÒÃ4
        .Offset(0, 64).Value = rg.Offset(29, 0).Value '¢¹Ò´4
        .Offset(0, 65).Value = rg.Offset(29, 8).Value '¢¹Ò´4
        .Offset(0, 66).Value = rg.Offset(31, -4).Value 'Çѵ¶Ø´Ôº4
        .Offset(0, 67).Value = rg.Offset(31, 5).Value 'ÃÒ¤ÒÇѵ¶Ø´Ôº4
        .Offset(0, 68).Value = rg.Offset(33, -3).Value 'à¤Å×ͺ4
        .Offset(0, 69).Value = rg.Offset(34, 3).Value 'ÃÒ¤Òà¤Å×ͺ4
        .Offset(0, 70).Value = rg.Offset(33, -1).Value '§Ò¹¾ÔàÈÉ4
        .Offset(0, 71).Value = rg.Offset(34, 5).Value 'ÃÒ¤Ò§Ò¹¾ÔàÈÉ4
        .Offset(0, 72).Value = rg.Offset(33, -5).Value 'ÊÕ4
        .Offset(0, 73).Value = rg.Offset(29, 3).Value '¨Ó¹Ç¹1
        .Offset(0, 74).Value = rg.Offset(29, 4).Value 'ÃÒ¤Ò1
        .Offset(0, 75).Value = rg.Offset(31, 3).Value '¨Ó¹Ç¹2
        .Offset(0, 76).Value = rg.Offset(31, 4).Value 'ÃÒ¤Ò2
        .Offset(0, 77).Value = rg.Offset(33, 3).Value '¨Ó¹Ç¹3
        .Offset(0, 78).Value = rg.Offset(33, 4).Value 'ÃÒ¤Ò3
        .Offset(0, 79).Value = rg.Offset(29, 5).Value 'ËÁÒÂà˵Ø4
        .Offset(0, 80).Value = rg.Offset(36, -7).Value 'ÃÒ¡Ò÷Õè5
        .Offset(0, 81).Value = rg.Offset(36, -5).Value 'ÃÒ¡ÒÃ5
        .Offset(0, 82).Value = rg.Offset(36, 0).Value '¢¹Ò´5
        .Offset(0, 83).Value = rg.Offset(36, 8).Value '¢¹Ò´5
        .Offset(0, 84).Value = rg.Offset(38, -4).Value 'Çѵ¶Ø´Ôº5
        .Offset(0, 85).Value = rg.Offset(38, 5).Value 'ÃÒ¤ÒÇѵ¶Ø´Ôº5
        .Offset(0, 86).Value = rg.Offset(40, -3).Value 'à¤Å×ͺ5
        .Offset(0, 87).Value = rg.Offset(41, 3).Value 'ÃÒ¤Òà¤Å×ͺ5
        .Offset(0, 88).Value = rg.Offset(40, -1).Value '§Ò¹¾ÔàÈÉ5
        .Offset(0, 89).Value = rg.Offset(41, 5).Value 'ÃÒ¤Ò§Ò¹¾ÔàÈÉ5
        .Offset(0, 90).Value = rg.Offset(40, -5).Value 'ÊÕ5
        .Offset(0, 91).Value = rg.Offset(36, 3).Value '¨Ó¹Ç¹1
        .Offset(0, 92).Value = rg.Offset(36, 4).Value 'ÃÒ¤Ò1
        .Offset(0, 93).Value = rg.Offset(38, 3).Value '¨Ó¹Ç¹2
        .Offset(0, 94).Value = rg.Offset(38, 4).Value 'ÃÒ¤Ò2
        .Offset(0, 95).Value = rg.Offset(40, 3).Value '¨Ó¹Ç¹3
        .Offset(0, 96).Value = rg.Offset(40, 4).Value 'ÃÒ¤Ò3
        .Offset(0, 97).Value = rg.Offset(36, 5).Value 'ËÁÒÂà˵Ø5
        End With
    End With
    Range("n12,N14,N16,N19,N21,n23,n26,n28,n30,n33,n35,n37,n40,n42,n44").ClearContents
    Set rSort = Sheets("DATA1").Range("a1").CurrentRegion
    Set sortField = rSort.Offset(1, 0).Resize(, 1)
    ActiveWorkbook.Worksheets("DATA1").sort.SortFields.Clear
    ActiveWorkbook.Worksheets("DATA1").sort.SortFields.Add Key:=sortField, _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("DATA1").sort
        .SetRange rSort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
End With
    Sheets("ÍÍ¡ãºàʹÍÃÒ¤Ò§Ò¹").Select
End Sub

Private Function IsDuplicate(c) As Boolean
Dim rg As Range
Set rg = Worksheets("DaTa1").Range("A:A")
If rg.Find(c, LookIn:=xlValues, Lookat:=xlWhole) Is Nothing Then
    IsDuplicate = False
Else
    IsDuplicate = True
End If
End Function

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Mon Jul 28, 2014 9:21 am
by snasui
:D เท่าที่สังเกตบรรทัดนี้หายไป Sheets("DATA1").Select การเขียน Code ตาม Style นี้ต้องเก็บบรรทัดนี้ไว้ครับ

หากยังไม่ได้ช่วยแนบไฟล์ล่าสุดที่ได้ปรับ Code แล้วมาด้วยครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Mon Jul 28, 2014 10:55 am
by sakajohn
ยังไม่ได้ครับอาจารย์ ลองปรับแล้วตามไฟล์แนบครับ ผมขออธิบายการทำงานอีกครั้งนะครับ
1.ที่ sheet แก้ไขราคา เราจะเลือกเลขที่เอกสารมาแก้ไข โดยจะต้องใส่ราคา ลงไปในช่องราคา N12 ก่อน จากนั้นกด บันทึกข้อมูล ถ้าข้อมูลซ๊ำก็จะไม่สามารถบันทึกได้
2.ถ้าข้อมูลไม่ซ๊ำ ก็จะบันทึกลงไปใน Sheet DATA1 โดยต้องการให้เลขที่เอกสารทำการเรียงลำดับจากน้อยไปมาก เพื่อความสะดวกในการค้นหาเลขที่เอกสารเพื่อสั่งพิมพ์ ในSheet ออกใบเสนอราคางาน

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Mon Jul 28, 2014 12:14 pm
by niwat2811
ลองเปลี่ยนตามนี้ดูครับว่าได้ไหม

Code: Select all

Set rSort = Sheets("DATA1").Range("a3").CurrentRegion

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Mon Jul 28, 2014 12:32 pm
by sakajohn
ได้แล้วครับ ขอบคุณอาจารย์และคุณniwat2811มากครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Mon Jul 28, 2014 2:40 pm
by sakajohn
รบกวนถามอีกปัญหาครับ ผมลองซ่อน Sheet "แก้ไขราคา" จากนั้นที่ Sheet "กรอกข้อมูล" ผมกดปุ่มแก้ไขราคา มันขึ้น

runtime error 1004 : select method of worksheet class failed ไปดูที่โค๊ต ฟ้องตรง Sheets("แก้ไขราคา").Select เกี่ยวกับที่ผมไปซ่อนsheet ไว้หรือเปล่าครับ แล้วจะแก้ได้ยังไงครับ

Code: Select all

Sub Edit()
'
' Edit Macro
'

'
    Sheets("กรอกข้อมูล").Select
    Sheets("แก้ไขราคา").Visible = True
End Sub
Sub แก้ไขราคา()
'
' แก้ไขราคา Macro
'

'
Sheets("แก้ไขราคา").Select
End Sub

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Mon Jul 28, 2014 7:31 pm
by snasui
sakajohn wrote:runtime error 1004 : select method of worksheet class failed ไปดูที่โค๊ต ฟ้องตรง Sheets("แก้ไขราคา").Select เกี่ยวกับที่ผมไปซ่อนsheet ไว้หรือเปล่าครับ แล้วจะแก้ได้ยังไงครับ
:D เกี่ยวโดยตรงครับ การแก้ไขสามารถทำไดัอย่างน้อย 2 วิธีคือใช้ Code ยกเลิกการซ่อนชีทก่อนเมื่อทำงานเสร็จแล้วค่อยซ่อนชีทด้วย Code อีกที

อีกวิธีจะต้องไม่ใช้ Code เพื่อ Select Sheet โดยการประกาศตัวแปรให้กับ Sheet นั้นเอาไว้ก่อนแล้วค่อยวาง Data หรือ Sort ที่ตัวแปรนั้น ลองปรับ Code มาเองก่อน ติดตรงไหนค่อยถามกันต่อ ที่สำคัญ Code ที่ปรับควรมีอยู่จริงในไฟล์แนบครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Tue Jul 29, 2014 3:31 pm
by sakajohn
ตอนนี้ผมลองปรับโดยใช้ macro มาช่วยครับ ก็แก้ไขได้ครับ สิ่งที่ผมติดอีกอย่างหนึ่งคือ ถ้าต้องการให้มันบันทึกซ๊ำข้อมูลเดิมใน sheet แก้ไขราคา โดยมีข้อแม้ว่า ที่ REV จะต้องไม่ซีำกันถึงจะเพิ่มข้อมูลลงไปได้ ครั้งแรกผมใช้เลขที่เอกสารเป็นตัวกำหนด แต่ถ้ามีการแก้ไขราคาจะต้องเปลี่ยนตรง REv เป็นเลข 1,2,3.. จึงจะสามารถบันทึกข้อมูลซ๊ำลงไปได้ครับ ไม่รู้จะทำอย่างไรครับ

อีกปัญหาที่ผมเจอคือ ผมต้องเอาไฟล์งานไปไว้ที่ เครื่องแม่แล้วให้แต่ละคนสามารถมาดีงไปใช้พร้อมกันและแก้ไขข้อมูลได้พร้อมกันครับ ผมไปกำหนดไฟล์งานให้เป็นแบบ share workbook แล้วครับ แต่ตอนที่เปิดขึ้นมามันจะให้ update เสร็จแล้วจะมีหน้าต่างฟ้องว่า
This Workbook contains one or more link that cannot be update ถ้าเรากด continue ไป เวลาใช้งานสามารถกดปุ่มที่เป็น Macro ได้ แต่ปุ่มที่เขียนด้วยCodeไม่สามารถกดได้ครับ ไม่รู้ต้องทำอย่างไรครับ แต่ถ้าเปิดจากเครื่องที่ทำตั้งแต่ครั้งแรกถึงจะดึงจากเครื่องแม่ก็สามารถกดปุ่มต่างๆ ได้ครบทั้งหมดครับ รบกวนช่วยเสนอแนะด้วยครับ ใกล้จะถึงเวลาต้องใช้งานแล้วครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Tue Jul 29, 2014 5:00 pm
by snasui
sakajohn wrote:ตอนนี้ผมลองปรับโดยใช้ macro มาช่วยครับ ก็แก้ไขได้ครับ สิ่งที่ผมติดอีกอย่างหนึ่งคือ ถ้าต้องการให้มันบันทึกซ๊ำข้อมูลเดิมใน sheet แก้ไขราคา โดยมีข้อแม้ว่า ที่ REV จะต้องไม่ซีำกันถึงจะเพิ่มข้อมูลลงไปได้ ครั้งแรกผมใช้เลขที่เอกสารเป็นตัวกำหนด แต่ถ้ามีการแก้ไขราคาจะต้องเปลี่ยนตรง REv เป็นเลข 1,2,3.. จึงจะสามารถบันทึกข้อมูลซ๊ำลงไปได้ครับ ไม่รู้จะทำอย่างไรครับ
:D ควรแจ้งว่า Procedure ใด ติดขัดบรรทัดใด จะได้ช่วยดูต่อไปจากนั้นครับ
sakajohn wrote:อีกปัญหาที่ผมเจอคือ ผมต้องเอาไฟล์งานไปไว้ที่ เครื่องแม่แล้วให้แต่ละคนสามารถมาดีงไปใช้พร้อมกันและแก้ไขข้อมูลได้พร้อมกันครับ ผมไปกำหนดไฟล์งานให้เป็นแบบ share workbook แล้วครับ แต่ตอนที่เปิดขึ้นมามันจะให้ update เสร็จแล้วจะมีหน้าต่างฟ้องว่า
This Workbook contains one or more link that cannot be update ถ้าเรากด continue ไป เวลาใช้งานสามารถกดปุ่มที่เป็น Macro ได้ แต่ปุ่มที่เขียนด้วยCodeไม่สามารถกดได้ครับ ไม่รู้ต้องทำอย่างไรครับ แต่ถ้าเปิดจากเครื่องที่ทำตั้งแต่ครั้งแรกถึงจะดึงจากเครื่องแม่ก็สามารถกดปุ่มต่างๆ ได้ครบทั้งหมดครับ รบกวนช่วยเสนอแนะด้วยครับ ใกล้จะถึงเวลาต้องใช้งานแล้วครับ
การ Share ไฟล์ไม่ Support การใช้งาน VBA ครับ ควรออกแบบไฟล์โปรแกรมแยกออกมาต่างหากจากข้อมูลที่ใช้ร่วมกันในลักษณะของ Share File ครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Wed Jul 30, 2014 11:35 am
by sakajohn
ที่ Procedure "แก้ไขราคา"ครับ ตอนนี้ ใช้ Code คือ

Code: Select all

Dim rg As Range

Set rg = Range("i4")

rg.Activate
If rg.Value = "" Then Exit Sub
If IsDuplicate(rg.Value) Then
    MsgBox "ข้อมูลซ๊ำเรียกหัวหน้าแก้ไข", vbCritical
    Exit Sub
เรากำหนดให้ดูค่าที่ช่อง i4 ต้องไม่ซ๊ำกัน ถ้าผมต้องการเพิ่มเงื่อนไขโดย ที่ช่อง i4 จะต้องมีรหัสไม่ซ๊ำกันและที่ช่อง O6 ต้องเป็นค่าว่าง ถึงจะแจ้งว่ารหัสซ๊ำกันกันครับ
แต่ถ้าช่อง O6 มีค่ามากกว่า 0 ให้บันทึกข้อมูลซ๊ำลงไปตำแหน่งเดิมครับ ผมจะต้องเขียนยังไงครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Wed Jul 30, 2014 11:40 am
by snasui
:D ให้เพิ่มเงื่อนไขการตรวจสอบที่เขียนมาทั้งหมดลงมาก่อน ติดแล้วค่อยถามกันครับ

กรณีเข้าเงื่อนไขพร้อมกันหลายเงื่อนไข ให้ใช้ And เข้ามาช่วย กรณีเข้าเพียงเงื่อนไขใดเพียงเงื่อนไขเดียวจากเงื่อนไขทั้งหมดให้ใช้ Or เข้ามาช่วยครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Wed Jul 30, 2014 11:22 pm
by sakajohn
อาจารย์ครับพอดีผมไม่มีความรู้ในการใช้ or and ครับ ผมเลยหาวิธีใหม่โดยการสร้าง sheet "Edit Price" ขึ้นมาใหม่ครับ จากนั้นใช้วิธีดึงข้อมูลจากsheet DATA1 มาเพื่อทำการแก้ไข แล้วให้บันทึกกลับไปใน Sheet DATA1 ผมต้องการให้สามารถแก้ไขรายละเอียด ใน Sheet "Edit Price" ได้ทั้งหมด ยกเว้นเลขที่เอกสารกับวันที่ โดยมีข้อแม้ว่าจะต้องใส่ ตัวเลข ที่มากกว่า ศูนย์ ในช่อง O6 ถึงจะยอมให้บันทึกค่าได้ครับ

ตอนนี้ที่ทำได้งูๆปลาๆ ครับ คือให้แก้ได้เฉพาะ ช่องราคาอย่างเดียวครับ หมดหนทางครับ Procedure EDIT PRICE ครับ

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Thu Jul 31, 2014 12:44 am
by sakajohn
ขอถามเพิ่มอีกคำถามครับ ถ้าผมต้องการให้เวลาอยู่ที่ Sheet ไหนก็แล้วแต่ จะไม่สามารถปิดโปรแกรม excel ได้ จะต้องกลับมาที่ Sheet1 ก่อนทุกครั้ง ถึงจะปิดโปรแกรมได้ครับ หรือถ้าปิดโปรแกรมเมื่อไหรจะต้องกลับไปที่sheet1ทุกครั้ง

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Thu Jul 31, 2014 9:36 am
by snasui
sakajohn wrote:ถ้าผมต้องการเพิ่มเงื่อนไขโดย ที่ช่อง i4 จะต้องมีรหัสไม่ซ๊ำกันและที่ช่อง O6 ต้องเป็นค่าว่าง ถึงจะแจ้งว่ารหัสซ๊ำกันกันครับ
แต่ถ้าช่อง O6 มีค่ามากกว่า 0 ให้บันทึกข้อมูลซ๊ำลงไปตำแหน่งเดิมครับ ผมจะต้องเขียนยังไงครับ
:D ตัวอย่าง Code สำหรับตรวจสอบสองเงื่อนไขตามด้านล่างครับ

Code: Select all

If IsDuplicate(rg.Value) And Range("o6") = "" Then
    MsgBox "ข้อมูลซ้ำเรียกหัวหน้าแก้ไข", vbCritical
    Exit Sub
End If
สำหรับการบันทึกตำแหน่งเดิมก็ต้องตรวจสอบก่อนว่าตำแหน่งเดิมเป็นบรรทัดใด ก็ค่อยเขียน Code ให้บันทึกลงบรรทัดนั้นครับ
sakajohn wrote:ขอถามเพิ่มอีกคำถามครับ ถ้าผมต้องการให้เวลาอยู่ที่ Sheet ไหนก็แล้วแต่ จะไม่สามารถปิดโปรแกรม excel ได้ จะต้องกลับมาที่ Sheet1 ก่อนทุกครั้ง ถึงจะปิดโปรแกรมได้ครับ หรือถ้าปิดโปรแกรมเมื่อไหรจะต้องกลับไปที่sheet1ทุกครั้ง
ไปที่ ThisWorkbook แล้วลองเพิ่ม Code ตามด้านล่างครับ

Code: Select all

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheets("Sheet1").Select
    ThisWorkbook.Save
End Sub
อย่าลืมปรับชื่อชีทให้เป็นชื่อชีทที่จะใช้จริง

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Thu Jul 31, 2014 12:42 pm
by sakajohn
จากสูตรที่อาจารย์ให้มา เรื่องการปิดโปรแกรม Excel ผมลองใช้แล้วติดปัญหาตรงที่ว่า Sheet1 ถูกซ่อนอยู่ครับ ผมเลยลองปรับ code ดูครับ

Code: Select all

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheets("Edit price").Select
    Sheets("Sheet1").Visible = True
    Sheets("Edit price").Select
    ActiveWindow.SelectedSheets.Visible = False
    ThisWorkbook.Save
End Sub
คือถ้าผมอยู่ที่ Sheet Edit price เมื่อกดปิดโปรแกรม Excel มันก็จะไปเปิด Sheet1 ก่อน แล้วซ่อน Sheet Edit price แล้วถึง Save แต่ถ้าอยู่Sheet อื่น จะต้องทำอย่างไรครับอาจารย์

Re: ทำยังไงให้ข้อมูลที่บันทึกลงอีกชีท เรียงข้อมูลจากน้อยไปมา

Posted: Thu Jul 31, 2014 2:39 pm
by snasui
:D ตัวอย่าง Code ตามด้านล่าง ซึ่งเป็นการซ่อนทุกชีทก่อนปิดไฟล์ยกเว้น Sheet1 ครับ

Code: Select all

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim sh As Worksheet
    Sheets("Sheet1").Visible = True
    For Each sh In Worksheets
        If sh.Name <> "Sheet1" Then
            sh.Visible = False
        End If
    Next sh
    ThisWorkbook.Save
End Sub