Chào thầy ạ, thầy cho e hỏi chút với ạ. E có đoạn cod để lưu phiếu nhập kho như bên dưới, mỗi lần lưu e tính cũng mất 10 giây ạ (dữ liệu data của e là 20.000 dòng), Liệu có cách nào để cod chạy nhanh hơn không ạ. e cảm ơn thầy
Sub PNK_Save()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False
Dim DongCuoi As Long
DongCuoi = Sheet3.Range("B" & Rows.Count).End(xlUp).Row
Dim DongCuoi_MaHang As Long
Dim DongCuoi_SoLuong As Long
DongCuoi_MaHang = Sheet5.Range("C" & Rows.Count).End(xlUp).Row
DongCuoi_SoLuong = Sheet5.Range("I32").Value
'Khai bao bien
Dim sh_PNK As Worksheet
Set sh_PNK = Sheets("PNK")
Dim tTime As Double
tTime = Timer
'Mo khoa sheet
Sheet3.Unprotect Password:="1991"
'Kiem tra loi truoc khi luu
If Sheet5.Range("D4").Value = "" Then 'Loi chua nhap Ngay
MsgBox "Chua nhap ngay"
Exit Sub
ElseIf Sheet5.Range("P4").Value = "" Then
MsgBox "Chua nhap noi nhan"
Exit Sub
ElseIf Sheet5.Range("P5").Value = "" Then
MsgBox "Chua nhap nguoi nhan"
Exit Sub
ElseIf Sheet5.Range("D6").Value = "" Then
MsgBox "Chua nhap nguoi giao"
Exit Sub
ElseIf DongCuoi_MaHang = 8 Then 'Chua co ma hang
MsgBox "Ban chua nhap vat tu"
Exit Sub
ElseIf DongCuoi_SoLuong = 0 Then 'Chua co so luong
MsgBox "Ban chua nhap so luong"
Exit Sub
ElseIf Sheet5.Range("R1").Value = "" Then
MsgBox "Chua nhap so quyen"
Exit Sub
ElseIf Sheet5.Range("R2").Value = "" Then
MsgBox "Chua nhap so phieu"
Exit Sub
Else
Call Tat_TB
Dim i As Integer
For i = 10 To DongCuoi_MaHang
If Sheets("PNK").Range("C" & i) <> "" Then
With Sheets("Data_NhapXuat")
.Range("B" & DongCuoi + 1).Value = sh_PNK.Range("Y1").Value 'Loai phieu
.Range("C" & DongCuoi + 1).Value = sh_PNK.Range("R1").Value 'So quyen
.Range("D" & DongCuoi + 1).Value = sh_PNK.Range("R2").Value 'So phieu
.Range("E" & DongCuoi + 1).Value = sh_PNK.Range("D4").Value 'Ngay lap
.Range("F" & DongCuoi + 1).Value = sh_PNK.Range("G" & i).Value 'Loai vat tu
.Range("G" & DongCuoi + 1).Value = sh_PNK.Range("F" & i).Value 'Kho xuat
.Range("H" & DongCuoi + 1).Value = sh_PNK.Range("P4").Value 'Kho nhap
.Range("I" & DongCuoi + 1).Value = sh_PNK.Range("D6").Value 'Nguoi giao
.Range("j" & DongCuoi + 1).Value = sh_PNK.Range("P5").Value 'Nguoi nhan
.Range("k" & DongCuoi + 1).Value = sh_PNK.Range("B" & i).Value 'So dong
.Range("L" & DongCuoi + 1).Value = sh_PNK.Range("C" & i).Value 'Ma hang
.Range("M" & DongCuoi + 1).Value = sh_PNK.Range("D" & i).Value 'Ten hang
.Range("N" & DongCuoi + 1).Value = sh_PNK.Range("E" & i).Value 'dvt
.Range("O" & DongCuoi + 1).Value = sh_PNK.Range("I" & i).Value 'So luong
.Range("P" & DongCuoi + 1).Value = sh_PNK.Range("O" & i).Value 'Don gia
.Range("Q" & DongCuoi + 1).Value = sh_PNK.Range("P" & i).Value 'Thanh tien
.Range("R" & DongCuoi + 1).Value = sh_PNK.Range("J" & i).Value 'Thue suat
.Range("S" & DongCuoi + 1).Value = sh_PNK.Range("K" & i).Value 'Chiet khau
.Range("T" & DongCuoi + 1).Value = sh_PNK.Range("Q" & i).Value 'Thanh tien sau thue
.Range("U" & DongCuoi + 1).Value = sh_PNK.Range("P6").Value 'Xe van chuyen
.Range("V" & DongCuoi + 1).Value = sh_PNK.Range("R" & i).Value 'Ghi chu
.Range("W" & DongCuoi + 1).Value = sh_PNK.Range("T" & i).Value 'Ma chi phi
.Range("X" & DongCuoi + 1).Value = sh_PNK.Range("P4").Value 'Du an
.Range("Y" & DongCuoi + 1).Value = sh_PNK.Range("H" & i).Value 'Phan tach chi phi
.Range("Z" & DongCuoi + 1).Value = sh_PNK.Range("L" & i).Value 'So de xuat vat tu
.Range("AB" & DongCuoi + 1).Value = sh_PNK.Range("S" & i).Value 'Trong luong don hang
End With
DongCuoi = DongCuoi + 1
End If
Next i
Call Data_NhapXuat_Sort
Call PNK_Reset
MsgBox "Cam on ban! Du lieu da duoc luu"
Call Bat_TB
End If
Sheet3.Protect Password:="1991"
Debug.Print "-TIME is: " & Timer - tTime
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
End Sub
Chào bạn muốn lưu nhanh bạn phải học về mảng hoặc là sql bạn có thể xem thêm ở khoá VBAG02
Vâng e cảm ơn thầy ạ