Page 1 of 1

อัพเดทข้อมูลข้ามไฟล์

Posted: Tue Dec 17, 2013 6:14 pm
by bank9597
:D จากโค๊ดด้านล่าง ผมไม่แน่ใจว่ามีอะไรผิดพลาด โค๊ดไม่อัพเดทข้อมูลให้ ซึ่งปกติหากเปิดไฟล์ทั้งสองอยู่ ก็สามารถอัพเดทข้อมูลได้ปกติครับ รบกวนดูให้หน่อยครับ

Code: Select all

Option Explicit
Dim db As Worksheet
Dim ws As Worksheet
Dim objWorkbook As Workbook

Private Sub cmd_save_Click()
      
            Set objWorkbook = Workbooks.Open("D:\ระบบงานออฟฟิศ\database.xlsm")
            Set db = objWorkbook.Sheets("tbl_supplier")
            Set ws = Workbooks("center.xlsm").Worksheets("temp_sup")
            
            With Application
                .DisplayAlerts = False
                .ScreenUpdating = False
            End With
                       
            Dim rsAll As Range, rtAll As Range
            Dim rs As Range, i As Integer
            If Me.txt_name <> "" Then
                Set rsAll = ws.Range("A13:K13")
                Set rtAll = db.Range("A2", db.Range("A" & Rows.Count).End(xlUp))
        
            For Each rs In rsAll
                For i = rtAll.Count To 1 Step -1
                    If rs = rtAll(i) And rs.Offset(0, 0) = rtAll(i).Offset(0, 0) Then
                        rs.Offset(0, 1).Resize(1, 10).Copy
                        rtAll(i).Offset(0, 1).PasteSpecial xlPasteValues
                        Application.CutCopyMode = False
                        MsgBox ("อัพเดทข้อมูลเรียบร้อยแล้ว")
                        ws.Range("C17:K17").ClearContents
                    End If
                Next i
            Next rs
            Else
            MsgBox "คุณยังไม่ระบุชื่อบุคคล", vbCritical
            End If
            
            objWorkbook.Close True
            With Application
                .DisplayAlerts = True
                .ScreenUpdating = True
            End With
                 
End Sub

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Tue Dec 17, 2013 6:48 pm
by snasui
:D ลอง Run ดูทีละ Step แล้วสังเกตดูว่า Code สำหรับการ Copy และ Paste ทำงานหรือไม่ครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Tue Dec 17, 2013 9:41 pm
by bank9597
snasui wrote::D ลอง Run ดูทีละ Step แล้วสังเกตดูว่า Code สำหรับการ Copy และ Paste ทำงานหรือไม่ครับ
:D ครับผม เดี๋ยวจะมารายงานผลอีกครั้งครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Fri Dec 20, 2013 4:57 pm
by bank9597
:( รบกวนด้วยครับอาจารย์ แก้ไม่ได้ซักที


ผมแนบไฟล์ทั้งสองมาให้ครับ

โมดูล cmd_save ในไฟล์ center.xlsm ครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Fri Dec 20, 2013 6:12 pm
by snasui
:D อาการของการ Update ข้อมูลไม่ได้โปรแกรมฟ้องหรือแสดงผลอย่างไรครับ :?:

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Fri Dec 20, 2013 8:32 pm
by bank9597
snasui wrote::D อาการของการ Update ข้อมูลไม่ได้โปรแกรมฟ้องหรือแสดงผลอย่างไรครับ :?:

:( อัพเดทข้อมูลไม่ได้ครับ ถ้าผมใช้โค๊ดแค่ :ard:

Code: Select all

Dim rsAll As Range, rtAll As Range
            Dim rs As Range, i As Integer
            With ws
                Set rsAll = .Range("A13")
                Set rs = .Range("A13:A13")
            End With
            With db
                Set rtAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
            End With
            With ws
                            For Each rs In rsAll
                            For i = rtAll.Count To 1 Step -1
                                If rs = rtAll(i) And rs.Offset(0, 0) = rtAll(i).Offset(0, 0) Then
                                    rs.Offset(0, 1).Resize(1, 10).Copy
                                    rtAll(i).Offset(0, 1).PasteSpecial xlPasteValues
                                    Application.CutCopyMode = False
                                    MsgBox ("อัพเดทข้อมูลเรียบร้อยแล้ว")
                                End If
                Next i
            Next rs
            End With
แล้วเปิดไฟล์ทั้งสองอยู่ มันจะอัพเดทได้ปกติครับ แต่พอปิดไฟล์ database แล้วเรียกขึ้นมาบันทึก มันก็อัพเดทไม่ได้ซะงั้น

ผมลองใส่ Else แล้ว msgbox เข้าไปในคำสั่ง แล้วสั่ง Run ดู ปรากฏว่าค้างอยู่ที่ Msgbox อย่างนั้นครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Fri Dec 20, 2013 9:06 pm
by snasui
:D ลองปรับ Code เดิมเป็นตามด้านล่างครับ

Code: Select all

Option Explicit

Sub cmd_save()
    Dim rsAll As Range, rtAll As Range
    Dim rs As Range, i As Integer
    Dim db As Worksheet
    Dim ws As Worksheet
    Dim objWorkbook As Workbook
    Dim rowNum As Integer
    
    Set objWorkbook = Workbooks.Open("D:\ระบบงานออฟฟิศ\database.xlsx")
    Set db = objWorkbook.Sheets("tbl_supplier")
    Set ws = Workbooks("center.xlsm").Worksheets("temp_sup")
    
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With
               
    With ws
        Set rsAll = .Range("A13:A13")
    End With
    With db
        Set rtAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
    End With
    For Each rs In rsAll
        With Application
            If .CountIf(rtAll, rs) > 0 Then
                rowNum = .Match(rs, rtAll, 0)
                rtAll(rowNum).Offset(0, 1).Resize(1, 10) = rs.Offset(0, 1).Resize(1, 10).Value
            End If
        End With
    Next rs
    
    objWorkbook.Close True
    
    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
    MsgBox "Your records updated"
End Sub
ผมเอา Message Box มาไว้หลังสุดเพื่อแสดงว่าได้เปิดไฟล์ บันทึกข้อมูลและปิดไฟล์ไปแล้วจึงค่อยแจ้งว่าการบันทึกสำเร็จ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Sat Dec 21, 2013 1:23 am
by bank9597
:D ทดสอบแล้วผ่านครับ เดี๋ยวผมจะนำไปปรับใช้กับของจริงครับ :thup:

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Mon Dec 23, 2013 3:02 pm
by bank9597
:( อาจารย์ครับ สั่งรันจาก userform แล้วโค๊ดไม่ทำงานเลยครับ ผมเอาโค๊ดไปปรับใช้ใน command button ปรากฏว่าโค๊ดไม่ทำงาน

ต้องแยกโค๊ดออกมาเขียนใน module แทน แล้วเขียนโค๊ดใน command button ว่า

Code: Select all

Private Sub cmd_save_Click()
        Unload Me
       Call saveup
       frm_sup_up.show
End Sub 
มันเป็นเพราะอะไรครับ อาจารย์พอจะทราบไหม

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Mon Dec 23, 2013 5:58 pm
by snasui
:D ลองแนบไฟล์ตัวอย่างพร้อม Code ชุดที่ไม่ทำงานมาดูครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Mon Dec 23, 2013 6:22 pm
by bank9597
snasui wrote::D ลองแนบไฟล์ตัวอย่างพร้อม Code ชุดที่ไม่ทำงานมาดูครับ
:D อาจารย์ครับ รบกวนอีกครั้งน่ะครับ

ผมต้องใช้ userform เพื่อความสะดวกของผู้ใช้งานครับ :)

โค๊ดที่ใช้งานได้ผลอยู่ในโมดูล update ครับ

ส่วนโค๊ดที่ไม่ทำงาน อยู่ใน userform ครับ มีอยู่ฟอร์มเดียวครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Mon Dec 23, 2013 7:16 pm
by snasui
:D ผมทดสอบ Code ใน UserForm แล้วไม่พบปัญหาใด ช่วยแจ้งรายละเอียดปัญหาเพื่อจะได้แก้ได้ตรงจุดครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Mon Dec 23, 2013 8:41 pm
by bank9597
snasui wrote::D ผมทดสอบ Code ใน UserForm แล้วไม่พบปัญหาใด ช่วยแจ้งรายละเอียดปัญหาเพื่อจะได้แก้ได้ตรงจุดครับ
:( ผมทดสอบแก้ไขข้อมูลใน Userform (ที่ดึงขึ้นมา) แล้วกด บันทึก ปรากฏว่าโค๊ดไม่ทำการบันทึกเปลี่ยนแปลงให้ครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Mon Dec 23, 2013 9:19 pm
by snasui
:D ลองกดแป้น F8 เพื่อ Run ทีละ Step ดูว่าติดที่บรรทัดใดครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Mon Dec 23, 2013 10:31 pm
by bank9597
:( อาจารย์ครับ มันไม่ติดบันทัดไหนครับ

กด F8 ก็รันฟอร์มขึ้นมาปกติ แต่พอทำการแก้ไขข้อมูลแล้วกดบันทึก มันกลับไม่เปลี่ยนแปลงอะไรเลยครับ

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Mon Dec 23, 2013 11:06 pm
by snasui
:D ผมลองเปลี่ยนแปลงข้อมูลแล้วก็เปลี่ยนได้ครับ Code ใน Module ให้ลบทิ้งไปก่อนหรือ Mark เป็น Comment ไปก่อน

เราสามารถเขียน Code ใน UserForm ทำงานดังกล่าวได้ไม่จำเป็นต้องอาศัย Module เข้ามาช่วย

Code ที่เขียนมานั้นเป็นการแก้ไขข้อมูลเดิม ไม่ใช่เป็นการเพิ่ม Record หากไม่มี Record เดิมอยู่จะไม่เห็นการเปลี่ยนแปลงใด

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

Re: อัพเดทข้อมูลข้ามไฟล์

Posted: Tue Dec 24, 2013 10:16 am
by bank9597
:D ขอบคุณมากครับ รู้สึกว่าจะได้แล้วครับ