Page 1 of 1
อัพเดทข้อมูลข้ามไฟล์
Posted: Tue Dec 17, 2013 6:14 pm
by bank9597

จากโค๊ดด้านล่าง ผมไม่แน่ใจว่ามีอะไรผิดพลาด โค๊ดไม่อัพเดทข้อมูลให้ ซึ่งปกติหากเปิดไฟล์ทั้งสองอยู่ ก็สามารถอัพเดทข้อมูลได้ปกติครับ รบกวนดูให้หน่อยครับ
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

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

ครับผม เดี๋ยวจะมารายงานผลอีกครั้งครับ
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

อาการของการ Update ข้อมูลไม่ได้โปรแกรมฟ้องหรือแสดงผลอย่างไรครับ

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


อัพเดทข้อมูลไม่ได้ครับ ถ้าผมใช้โค๊ดแค่
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

ลองปรับ 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

ทดสอบแล้วผ่านครับ เดี๋ยวผมจะนำไปปรับใช้กับของจริงครับ

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

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

อาจารย์ครับ รบกวนอีกครั้งน่ะครับ
ผมต้องใช้ userform เพื่อความสะดวกของผู้ใช้งานครับ
โค๊ดที่ใช้งานได้ผลอยู่ในโมดูล update ครับ
ส่วนโค๊ดที่ไม่ทำงาน อยู่ใน userform ครับ มีอยู่ฟอร์มเดียวครับ
Re: อัพเดทข้อมูลข้ามไฟล์
Posted: Mon Dec 23, 2013 7:16 pm
by snasui

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

ผมทดสอบแก้ไขข้อมูลใน Userform (ที่ดึงขึ้นมา) แล้วกด บันทึก ปรากฏว่าโค๊ดไม่ทำการบันทึกเปลี่ยนแปลงให้ครับ
Re: อัพเดทข้อมูลข้ามไฟล์
Posted: Mon Dec 23, 2013 9:19 pm
by snasui

ลองกดแป้น 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

ผมลองเปลี่ยนแปลงข้อมูลแล้วก็เปลี่ยนได้ครับ Code ใน Module ให้ลบทิ้งไปก่อนหรือ Mark เป็น Comment ไปก่อน
เราสามารถเขียน Code ใน UserForm ทำงานดังกล่าวได้ไม่จำเป็นต้องอาศัย Module เข้ามาช่วย
Code ที่เขียนมานั้นเป็นการแก้ไขข้อมูลเดิม ไม่ใช่เป็นการเพิ่ม Record หากไม่มี Record เดิมอยู่จะไม่เห็นการเปลี่ยนแปลงใด
ช่วยเขียนเป็นลำดับการทดสอบว่าต้องทดสอบอย่างไร หากทดสอบตามนั้นแล้วเกิดผลอย่างไร ที่ถูกต้องควรเป็นอย่างไร จะได้เข้าถึงปัญหาได้โดยไวครับ
Re: อัพเดทข้อมูลข้ามไฟล์
Posted: Tue Dec 24, 2013 10:16 am
by bank9597

ขอบคุณมากครับ รู้สึกว่าจะได้แล้วครับ