Page 1 of 4

ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Sat Aug 13, 2011 3:20 pm
by su019
ต้องการดึงข้อมูล และกดปุ่มลบ ตามที่ต้องการ และบางรายการต้องการแก้ไขจำนวน ไม่ได้ต้องการลบข้อมูล ไม่ทราบว่าพอจะทำได้ไหมค่ะ
ได้แนบไฟล์ที่ทำงานให้ด้วยค่ะ ไฟล์จะสร้างด้วยสูตร และ Pivot เป็นหลักค่ะ ( Pivot จะได้แค่โชว์ข้อมูลตามที่ต้องการเท่านั้น ซึ่งไม่สามารถ ลบ แก้ไข ข้อมูลอะไรได้เลยค่ะ และที่สำคัญจะเอาไฟล์นี้ให้ User ใช้ จึงไม่อยากลบจากข้อมูลดิบตรง ๆ ค่ะ )

ขอบคุณค่ะ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Sat Aug 13, 2011 3:44 pm
by snasui
:D Code ควรเก็บไว้ใน Module ปกติครับ สำหรับการลบข้อมูลตาม OI ที่เลือกมาผมทำตัวอย่างให้แล้ว

ส่วนการแก้ไขสินค้าปกติก็จะใช้ Code ในการดึงรายการสินค้านั้น ๆ มาแสดงแล้วแก้ไขแล้วกดปุ่ม Update รายการสินค้านั้นก็จะถูก Update ลองเขียน Code มาดูก่อน ติดตรงไหนก็ถามกันต่อครับ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Sun Aug 14, 2011 12:25 pm
by su019
สอบถามเพิ่มเติมค่ะ

แต่หากเราต้องการเรียกข้อมูลตาม OI แล้วบางรายการต้องการลบข้อมูล บางรายการต้องการแก้ไขจำนวน ไม่ทราบว่าพอจะมีวิธีแนะนำบ้างไหมค่ะ

เพราะวิธีที่ทำอยู่นี้ยังไม่ตรงตามที่ต้องการค่ะ เพราะมันจะลบตามเลขที่ OI ทั้งหมด แต่บางรายการเราไม่ต้องการลบ เราต้องการแค่แก้ไขเท่านั้นเอง


ได้แนบไฟล์ที่ทำมาด้วยค่ะ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Sun Aug 14, 2011 2:16 pm
by snasui
:D การไม่ให้แสดงค่าซ้ำทำตาม Link นี้ครับ http://snasui.blogspot.com/2010/05/blog-post.html แล้วนำค่าที่ได้มาใช้ใน Validation

ส่วนการ Update รายการและการ Delete รายการจำเป็นจะต้องบอกให้โปรแกรมทราบว่ารายการไหนจะ Update รายการไหนจะ Delete ผมทำตัวอย่างมาให้แล้วในไฟล์แนบ ทั้งได้เพิ่มปุ่มเพื่อให้โปรแกรมทำงานคราวเดียวทั้ง Update ทั้ง Delete

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Sun Aug 14, 2011 8:10 pm
by su019
อาจารย์ค่ะ ไม่มี macro Code Update_all มาด้วยค่ะ

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

แล้วถ้าหากจะปรับเปลี่ยนมาใช้ Code เหมือน Link การแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย VBA
http://snasui.blogspot.com/ ซึ่งไม่ทราบว่าข้อมูลที่โชว์ออกมานั้น เราสามารถแก้ไขได้เลยไหมค่ะ แล้วมันจะแก้ปัญหาตรงนี้ได้ไหมค่ะ

พอทำไปทำมา เริ่มงงค่ะ


ขอบคุณค่ะ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Sun Aug 14, 2011 8:44 pm
by snasui
:shock:
su019 wrote:อาจารย์ค่ะ ไม่มี macro Code Update_all มาด้วยค่ะ
ผมดาวน์โหลดมาตรวจสอบ พบว่ามีแล้วครับ

Code: Select all

Sub UpdateAll()
    UpdateData
    DeleteData
End Sub
su019 wrote:ถ้ารายการที่เราต้องการ update ซึ่งตอนนี้มันเป็นสูตรดึงข้อมูลขึ้นโชว์ข้อมูลอยู่ แล้วเรามีการแก้ไขข้อมูลในบรรทัดนั้นเลย มันจะมีปัญหาอะไรหรือเปล่าค่ะ เพราะมันเป็นสูตร
มีปัญหาแน่ครับ สูตรที่ดึงมาก็เสียหาย ใช้การไม่ได้ครับ
su019 wrote:แล้วถ้าหากจะปรับเปลี่ยนมาใช้ Code เหมือน Link การแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย VBA
http://snasui.blogspot.com/ ซึ่งไม่ทราบว่าข้อมูลที่โชว์ออกมานั้น เราสามารถแก้ไขได้เลยไหมค่ะ แล้วมันจะแก้ปัญหาตรงนี้ได้ไหมค่ะ
แก้ปัญหาได้แน่นอน เพราะไม่ได้ใช้สูตร และสงสัยว่าทำไมไม่วาง Code ไว้ใน Module นำมาวางไว้ใน WorkSheet ไม่เกิดผลอะไรครับ เพราะไม่สามารถทดสอบได้ครับ

Note: ปกติการแก้ไขข้อมูลที่เป็นระบบจะไม่เข้าไปแก้ข้อมูลเดิมกันตรง ๆ อย่างที่พยายามจะทำอยู่นี้ครับ ถ้าหากได้บันทึกไว้น้อยไปก็บันทึกเพิ่มด้วยผลต่าง ถ้ามากไปก็บันทึกหักออกด้วยผลต่าง หรือถ้าบันทึกผิดก็บันทึกยกเลิกรายการเดิมทั้งจำนวนแล้วค่อยบันทึกที่ถูกเข้าไปใหม่

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Sun Aug 14, 2011 10:35 pm
by su019
แก้ปัญหาได้แน่นอน เพราะไม่ได้ใช้สูตร และสงสัยว่าทำไมไม่วาง Code ไว้ใน Module นำมาวางไว้ใน WorkSheet ไม่เกิดผลอะไรครับ เพราะไม่สามารถทดสอบได้ครับ หมายความว่ายังไงค่ะ ไม่เข้าใจค่ะ

และ Code การแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย VBA
ลองทำแล้ว เมื่อมีการเลือก Code ก็จะ Error
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$2" And Target <> "" Then
    ShowEmp ตลอดเลยค่ะ รบกวนอาจารย์ช่วยแนะนำหน่อยได้ไหมค่ะ

ขอบคุณค่ะ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Mon Aug 15, 2011 12:47 pm
by snasui
su019 wrote:แก้ปัญหาได้แน่นอน เพราะไม่ได้ใช้สูตร และสงสัยว่าทำไมไม่วาง Code ไว้ใน Module นำมาวางไว้ใน WorkSheet ไม่เกิดผลอะไรครับ เพราะไม่สามารถทดสอบได้ครับ หมายความว่ายังไงค่ะ ไม่เข้าใจค่ะ
ตามไฟล์ที่แนบมานั้น Code ไม่ได้วางใน VBE แต่วางใน Sheet Excel ตามภาพ ซึ่งไม่สามารถทดสอบได้ครับ

หากลองทำแล้ว ส่งตัวอย่างที่ได้ทดลองแล้วติดปัญหามาด้วยครับ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Thu Aug 18, 2011 4:48 pm
by su019
อาจารย์
ขอโทษที่ตอบช้า พอดีมีงานอื่นเข้ามาค่ะ ตอนนี้สุแนบไฟล์ที่พยายามเลียนแบบจากอาจารย์มาด้วย รบกวนช่วยดูให้หน่อยนะค่ะ

ขอบคุณค่ะ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Thu Aug 18, 2011 5:40 pm
by snasui
:D คุณ su019 Copy Code มายังไม่ครบและมีการแก้ไขตำแหน่งไม่ถูกต้อง ผมปรับให้แล้วตามด้านล่าง ลอง Copy ไปทดสอบดูครับ

Code: Select all

Option Base 1
Sub ShowEmp()
Dim a() As Variant, lng As Long
Dim r As Range, rAll As Range
Dim rt As Range, rl As Long
Application.EnableEvents = False
Application.ScreenUpdating = False
rl = Rows.Count
With Worksheets("Data2")
    Set rAll = .Range("G2", .Range("G" & rl).End(xlUp))
End With
For Each r In rAll
    If r = Worksheets("Report").Range("E2") Then
        lng = lng + 1
        ReDim Preserve a(5, lng)
        a(1, lng) = lng
        a(2, lng) = r.Offset(0, -6)
        a(3, lng) = r.Offset(0, -5)
        a(4, lng) = r.Offset(0, -4)
        a(5, lng) = r.Offset(0, -3)
    End If
Next r
If lng > 0 Then
    With Worksheets("Report")
        Set rt = .Range("A5", .Range("E" & lng - 1 + 5))
        .Range("A5", .Range("E" & rl)).ClearContents
        .Range("A5:E5").Copy
        rt.PasteSpecial xlPasteFormats
        rt = Application.Transpose(a)
        .Range("E2").Select
    End With
Else
    MsgBox "Data not found."
End If
Application.EnableEvents = True
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Thu Aug 18, 2011 8:48 pm
by su019
อาจารย์ค่ะ
สอบถามเพิ่มเติมค่ะ พอดีเอาข้อมูลจากที่อสจาย์ให้มาแก้ไข ปรากฏว่าติดปัญหาค่ะ
คือจะเพิ่มข้อมูลที่จะโชว์มากกว่า Column ที่โชว์
อยากจะให้ข้อมูลที่ออกมาเหมือน Sheet Print_OI ค่ะ แต่ก็ Error ค่ะ (ยังไม่เข้าใจ Function Offset ค่ะ )

อยากให้อาจารย์ช่วยดูให้หน่อยได้ไหมค่ะ

ขอบคุณค่ะ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Thu Aug 18, 2011 9:30 pm
by snasui
:D ลองปรับมาเองนะครับ ผมคิดว่าไม่ยากจนเกินไปกับการใช้ Offset และจำเป็นที่จะต้องแก้ไขเองเป็นบ้างหากต้องการใช้ VBA

ที่แน่ ๆ

Code: Select all

 ReDim Preserve a(5, lng)
จะต้องเปลี่ยนเป็นตามจำนวนคอลัมน์ที่ต้องการนำมาวางครับ หากนำมาวาง 9 คอลัมน์ ก็ต้องเปลี่ยนเป็น

Code: Select all

 ReDim Preserve a(9, lng)
ส่วนการใช้ Offset จะยกตัวอย่างเพื่อความเข้าใจครับ
r.offset(0,0) หมายถึงว่าให้นำค่า r มาเลย เลข 0 ตัวแรกหมายถึงถัดจากเซลลปัจจุบันลงไปด้านล่างจำนวนกี่บรรทัด
เลข 0 ตัวที่สองหมายถึงว่าถัดจากเซลล์ปัจจุบันไปด้านขวาจำนวนกี่คอลัมน์ ถ้าหากมีตัวเลขเป็นลบก็แสดงว่ากลับด้านกับที่อธิบายมาแล้ว ส่วนบรรทัดนี้

Code: Select all

Set rt = .Range("A5", .Range("J" & lng - 1 + 5))
กรณีตามตัวอย่างไม่ต้องไปเปลี่ยนค่ามันครับ เห็นเปลี่ยนมาเป็น

Code: Select all

Set rt = .Range("A5", .Range("J" & lng - 1 + 9))
จะทำให้ Range มากเกินกว่าที่ควรจะเป็น

Code นี้ความหมายคือให้เริ่มที่บรรทัดที่ 5 นับไปอีกเท่าจำนวนของค่าตัวแปร lng หักออกด้วย 1

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Wed Aug 24, 2011 2:19 am
by su019
เรียนอาจารย์
ตอนนี้ยังติดปัญหาเรื่องการจัดรูปแบบ Field อยู่ และการ Update หรือ Delete ข้อมูลค่ะ รบกวนอาจารย์ช่วยดูให้หน่อยนะค่ะ
ถ้าได้คราวนี้น่าจะได้ไฟล์ตามที่ต้องการค่ะ

ได้แนบไฟล์ที่แก้มาด้วยค่ะ

ขอบคุณอาจารย์มากนะค่ะที่ให้ความช่วยเหลือ และให้ความรู้

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Wed Aug 24, 2011 6:19 am
by snasui
:D การเปลี่ยน Format ให้เหมือนชีท Database ให้แก้ Code เป็น

Code: Select all

.Range("B5", .Range("B" & rl).End(xlUp)).NumberFormat = "@"
ส่วนการ Update และการ Delete ปรับ Code ใหม่เป็นตามด้านล่าง สังเกตว่าปรับเฉพาะช่วง If ซึ่งตรวจสอบว่า Product Code และ WareHouse เดียวกันแล้วค่อย Update หรือ Delete ครับ

Code: Select all

Sub UpdateAll()
    UpdateData
    DeleteData
End Sub

Sub UpdateData()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
With Worksheets("Report")
       Set rsAll = .Range("L5", .Range("L" & (5 - 1 + .Range("H2"))))
End With
With Worksheets("Database")
       Set rtAll = .Range("C2", .Range("C" & Rows.Count).End(xlUp))
End With
For Each rs In rsAll
    For i = rtAll.Count To 1 Step -1
        If rs.Offset(0, -10) = rtAll(i).Offset(0, -1) _
            And rs.Offset(0, -9) = rtAll(i) _
            And rs = "Update" Then
                rs.Offset(0, -10).Resize(1, 10).Copy
                rtAll(i).Offset(0, -1).PasteSpecial xlPasteValues
        End If
    Next i
Next rs
Application.CutCopyMode = False
End Sub

Sub DeleteData()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
With Worksheets("Report")
    Set rsAll = .Range("L5", .Range("L" & (5 - 1 + .Range("H2"))))
       MsgBox "Please Confirm Delete & Update Data OI "
End With
With Worksheets("Database")
    Set rtAll = .Range("C2", .Range("C" & Rows.Count).End(xlUp))
End With
For Each rs In rsAll
    For i = rtAll.Count To 1 Step -1
        If rs.Offset(0, -10) = rtAll(i).Offset(0, -1) _
            And rs.Offset(0, -9) = rtAll(i) _
            And rs = "Update" Then
                rtAll(i).EntireRow.Delete
        End If
    Next i
Next rs
End Sub

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Wed Aug 24, 2011 8:34 am
by su019
สอบถามเพิ่มเติมค่ะ

เลือก Update ข้อมูล แต่ มันกลับเป็น Delete ข้อมูลค่ะ งงค่ะ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Wed Aug 24, 2011 8:46 am
by snasui
:lol: ลอง Assigned Macro ให้กับปุ่มต่าง ๆ ใหม่ครับ

ยกตัวอย่างการ Assign Macro ให้กับปุ่ม Update คลิกขวาที่ปุ่มที่ต้องการ Update > เลือก Assign Macro แล้ว เลือกชื่อ Macro ที่ต้องการใช้กับนั้น ๆ ตามต้องการครับ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Wed Aug 24, 2011 9:13 am
by su019
อาจารย์ค่ะ

: ส่วนการ Update และการ Delete ปรับ Code ใหม่เป็นตามด้านล่าง สังเกตว่าปรับเฉพาะช่วง If ซึ่งตรวจสอบว่า Product Code และ WareHouse เดียวกันแล้วค่อย Update หรือ Delete ครับ :

ตรงนี้มันไม่ใช่ค่ะ สิ่งที่ต้องการให้ข้อมูลจะ update หรือ Delete ก้ต่อเมื่อ เป็นไปตาม OI ที่เราดึงข้อมูลมาค่ะ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Wed Aug 24, 2011 9:52 am
by snasui
su019 wrote:ตรงนี้มันไม่ใช่ค่ะ สิ่งที่ต้องการให้ข้อมูลจะ update หรือ Delete ก้ต่อเมื่อ เป็นไปตาม OI ที่เราดึงข้อมูลมาค่ะ
เมื่อไม่ใช่ก็ปรับให้เป็นใช่ครับ ผมเขียน Code เผื่อมาให้กรณีใช้สองเงื่อนไข กรณีไม่ใช้ก็ลบเงื่อนไขที่ไม่ใช้ทิ้งไปครับ :mrgreen:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Wed Aug 24, 2011 11:39 am
by su019
อาจารย์

ลองแล้วก็ยังไม่ได้ ตอนนี้งงไปหมดแล้ว ลองเอา Code ก่อนหน้านี้มาก็ error ค่ะ

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

Posted: Wed Aug 24, 2011 11:44 am
by snasui
:P ลองด้วย Code ไหน โพสต์มาด้วยครับ แนบไฟล์มาก็ได้ ไม่งั้นก็ไม่ทราบว่าแก้อย่างไร แก้ถูกที่หรือไม่ครับ :mrgreen: