
อาจารย์ครับ ผมขอถามอีกคำถามครับ เป็นเรื่องการอัพเดทข้อมูล ผมเข้าใจข้อจำกัดประการหนึ่งคือ หากข้อมูลเยอะๆก็จะทำการอัพเดทข้อมูลช้าอยู่แล้วเป็นเรื่องธรรมดา แต่ผมคิดว่าการเขียนโค๊ดถูกหลักมันก็สามารถช่วยเพิ่มความเร็วในการอัพเดทข้อมูลได้ใช่ไหมครับ
ตามไฟล์แนบนั้น ไม่มีปัญหาติดขัดอะไรครับ ผมสามารถอัพเดทข้อมูลได้ถูกต้อง เพียงแต่จะสมมุติเหตุการณืว่าหากมีข้อมูลจำนวนเยอะประมาณ 1000 บรรทัดขึ้นไป จะปรับโคีดอย่างไรให้มันทำการอัพเดทเร็วกว่าเดิมครับ เบื้องต้นทดลองในไฟล์จริง ใช้เวลาไปต่อชีทเกือบ 30 วินาที ข้อมูลก็ไม่เยอะเท่าไหร่ครับ
ในไฟล์แนบ นำข้อมูลในชีม product ไปอัพเดทในชีท database และ Data พร้อมกัน โดยการสั่งงานเพียงครั้งเดียว
ผมใช้โค๊ดนี้ครับ
Code: Select all
Sub UpdateProduct()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
On Error Resume Next
With Worksheets("Product")
Set rsAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
End With
With Worksheets("Database")
Set rtAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
End With
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) _
And rs.Offset(0, 1) <> "" Then
rs.Offset(0, 1).Copy
rtAll(i).Offset(0, 1).PasteSpecial xlPasteValues
End If
Next i
Next rs
With Worksheets("Product")
Set rsAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
End With
With Worksheets("Data")
Set rtAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
End With
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) _
And rs.Offset(0, 1) <> "" Then
rs.Offset(0, 1).Copy
rtAll(i).Offset(0, 1).PasteSpecial xlPasteValues
End If
Next i
Next rs
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox ("บันทึกข้อมูลเรียบร้อยแล้ว")
End Sub
รบกวนด้วยครับ
You do not have the required permissions to view the files attached to this post.