Em dùng 10 Userform trên 1 file excel, em cũng dùng khoảng 20 biến toàn cục và có gải phóng biến khi kết thúc sub. Em thấy file excel chiếm bộ nhớ máy tính gấp 4 lần sau khi hoạt động khoảng 3 tiếng và gây lỗi chương trình, tắt đi mở lại file thì lại chạy tốt. Mong các anh chị dành cho em chút ít kinh nghiệm về việc này? Em chân thành cảm ơn!!!
************
Đây là các biến toàn cục em sử dụng và đã cho hết vào 1 Module:
Option Explicit
Public ws As Worksheet, ws2 As Worksheet, ws3 As Worksheet, ws4 As Worksheet
Public rng As Range, rng2 As Range, rng3 As Range
Public i As Integer, i2 As Integer, i3 As Integer
Public ar As Variant, ar2 As Variant, ar3 As Variant
Public lr As Long, lr2 As Long, lr3 As Long
Public Str As String, str2 As String, str3 As String
Ở Sub chạy chính thì thêm End vào trước dòng End Sub (Không úp code nên chỉ định phương án mò vậy thôi).
Em cảm ơn anh góp ý! Em có nhiều Module nên xin gửi 1 Sub này mong anh nhận xét giùm:
Sub IN_RIENG()
Application.ScreenUpdating = False
Set ws = SBaoGia
Set ws2 = STinhTien
Set rng = ws.Range("Q36:Q42")
Set rng2 = ws.Range("Q44:S59")
With ws2
.Activate
.Unprotect Password:="anhnghi07"
.Range("P9").Formula = "=BAO_GIA!$Q44"
.Range("S9").Formula = "=BAO_GIA!$R44"
.Range("P9:R9").AutoFill Destination:=Range("P9:R24"), Type:=xlFillDefault
.Range("S9:S24").FillDown
If WorksheetFunction.CountA(rng) < 1 Then
MsgBox "Chua co thong tin cua phieu!", vbCritical
ElseIf WorksheetFunction.CountA(rng2) < 1 Then
MsgBox "Chua co hàng hóa!", vbCritical
ElseIf MsgBox("Xác nhân Tính Tiên?", vbYesNo, "THÔNG BÁO:") = vbYes Then
If .Range("M1").Value = 1 Then
Call IN_BILL_1
UFXinKhachNhanXet.Show vbModeless
Else
Call IN_BILL_2
End If
Unload U_Tong
.Range("J23").Formula = "=R26/1000" 'LÀM GON SÔ TIÊN LAI
.Range("M1").Formula = "=RANDBETWEEN(0,9)"
.Range("M1").Value = .Range("M1").Value ' Lây du liêu M1 dê xác dinh xin ý kiên khách
Call Nhap_Lieu_Nhat_Ky
Call mo_form_BoSungThongTinHD
With ws
.Unprotect Password:="anhnghi07"
.Range("Q36:Q42").ClearContents
.Range("Q44:S59").ClearContents
.Range("Q43:S43").Value = .Range("L29:N29").Value
.Protect Password:="anhnghi07"
End With
End If
.Protect Password:="anhnghi07"
End With
ActiveWorkbook.Save
ws.Activate
Set ws = Nothing
Set ws2 = Nothing
Set ws3 = Nothing
Set ws4 = Nothing
Set rng = Nothing
Set rng2 = Nothing
Application.ScreenUpdating = True
End Sub
em viết vội, đúng là không giải phóng biến này được ạ. Cảm ơn anh! Anh giúp em chút, xin góp ý Giùm em với! (Anh VietMimi là người rất giỏi và nhiệt tình trên diễn đàn này, trân trọng anh!)
Xin lỗi vì không gửi file lên, em có một sub này hay sử dụng. Xin anh xem giùm và góp ý giúp em với ạ
Sub IN_RIENG()
Application.ScreenUpdating = False
Set ws = SBaoGia
Set ws2 = STinhTien
Set rng = ws.Range("Q36:Q42")
Set rng2 = ws.Range("Q44:S59")
With ws2
.Activate
.Unprotect Password:="anhnghi07"
.Range("P9").Formula = "=BAO_GIA!$Q44"
.Range("S9").Formula = "=BAO_GIA!$R44"
.Range("P9:R9").AutoFill Destination:=Range("P9:R24"), Type:=xlFillDefault
.Range("S9:S24").FillDown
If WorksheetFunction.CountA(rng) < 1 Then
MsgBox "Chua co thong tin cua phieu!", vbCritical
ElseIf WorksheetFunction.CountA(rng2) < 1 Then
MsgBox "Chua co hàng hóa!", vbCritical
ElseIf MsgBox("Xác nhân Tính Tiên?", vbYesNo, "THÔNG BÁO:") = vbYes Then
If .Range("M1").Value = 1 Then
Call IN_BILL_1
UFXinKhachNhanXet.Show vbModeless
Else
Call IN_BILL_2
End If
Unload U_Tong
.Range("J23").Formula = "=R26/1000" 'LÀM GON SÔ TIÊN LAI
.Range("M1").Formula = "=RANDBETWEEN(0,9)"
.Range("M1").Value = .Range("M1").Value ' Lây du liêu M1 dê xác dinh xin ý kiên khách
Call Nhap_Lieu_Nhat_Ky
Call mo_form_BoSungThongTinHD
With ws
.Unprotect Password:="anhnghi07"
.Range("Q36:Q42").ClearContents
.Range("Q44:S59").ClearContents
.Range("Q43:S43").Value = .Range("L29:N29").Value
.Protect Password:="anhnghi07"
End With
End If
.Protect Password:="anhnghi07"
End With
ActiveWorkbook.Save
ws.Activate
Set ws = Nothing
Set ws2 = Nothing
Set ws3 = Nothing
Set ws4 = Nothing
Set rng = Nothing
Set rng2 = Nothing
Application.ScreenUpdating = True
End Sub