Mã:
Sub ReleaseObjectMemory()
'Co the la bat ky bien Object nao
Dim wSheet as Worksheet
'Dat bien Object
Set wSheet = Sheet1
'Dat code cua ban o day
'Giai phong bo nho
Set wSheet = Nothing
End Sub
Sub ReleaseObjectMemory()
'Co the la bat ky bien Object nao
Dim wSheet as Worksheet
'Dat bien Object
Set wSheet = Sheet1
'Dat code cua ban o day
'Giai phong bo nho
Set wSheet = Nothing
End Sub
Vậy anh có thể giúp em cho 1 ví dụ được không ạh.Tiện thể phân tích giúp em làm việc đó lợi ích là gì? Mình có đọc 1 số code thấy khai báo declare ... từ file.ocx or dll gì đó, như vậy có hao tốn bộ nhớ không, cần phải làm gì với những khai báo dạng như thế để đỡ tốn bộ nhớ.
Xin cám ơn.
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, ByVal x As Long, _
ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Trong code này có cái nào là biến gì đâu mà cần giải phóng hả bạn?Xin vui lòng cho hỏi, nếu khai báo trong Form như dưới đây, thì khi thoát Form dùng lệnh gì để giải phóng bộ nhớ?
PHP:Option Explicit Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hWnd As Long, _ ByVal hWndInsertAfter As Long, ByVal x As Long, _ ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Cám ơn rất nhiều!
Trong code này có cái nào là biến gì đâu mà cần giải phóng hả bạn?
Hàm API thôi mà! Quan trọng là bạn dùng nó ra sao? (mới biết mà nói tiếp được)
Vấn đề quan trọng vẫn là cách viết code thế nào!Cứ mỗi lần load form lên, rồi chuyển qua form khác rồi quay lại form này với form khác, vài lần thấy bộ nhớ bị tăng đáng kể có lúc bị ngưng hoạt động mà không làm gì trên form cả, từ 33M tăng 42, 71... (theo dõi qua Processing Task Management), nếu không phải nó thì tại sao nhỉ? Nhưng khi không sử dụng Form trở về Sheet (trước khi load form cho ẩn sheet) thì lại trở về 33M.
Vấn đề quan trọng vẫn là cách viết code thế nào!
Nếu có thể được, bạn cho file lên đây nhé
Em tìm ra nguyên nhân tăng dung lượng rồi Thầy ơi, không phải do Code mà là do Form. Thuộc tính Form em để Picture là Bitmap, nhúng hình vào đó, khi em gỡ ra thì không thấy tăng lên, hoặc tăng rất ít. Không lẽ show form này, unload form kia lại chồng dung lượng lên ta? Cái hình ảnh hưởng gì vậy?
Có lẽ trong Userform của Thiện có sử dụng cái gì đó liên quan tới ảnh?
Private Sub CommandButton1_Click()
Unload Me
UserForm2.Show
End Sub
Private Sub CommandButton1_Click()
Unload Me
UserForm1.Show
End Sub
Private Sub UserForm_Activate()
Image1.Picture = LoadPicture("D:\Anh\New Folder\DSC03069.jpg")
End Sub
Anh Thiện thử dùng phương thức LoadPicture xem sao, khi đóng nó tự mất hình cho đỡ mệt cái giải phóng biến:
Việc khai báo các hàm trong thư viện (*.dll, *.ocx, *.exe) với từ khóa Declare và việc viết các hàm và thủ tục trong VBA molule chỉ ảnh hưởng ít tới bộ nhớ, chỉ khi hàm hay thủ tục được sử dụng thực sự, nó sẽ được WINDOWS quản lý và giải phóng chúng hoàn toàn khỏi bộ nhớ khi thoát khỏi khỏi Excel.
Ảnh hưởng tới bộ nhớ xảy ra thực sự khi các hàm đó làm việc và nếu người viết hàm đó mà không có cơ chế bảo toàn bộ nhớ thì bộ nhớ của máy sẽ bị chiếm dụng và đến mục lúc phải khởi động lại máy.
View attachment 303913
Bạn ơi cho mình hỏi: Đoạn code trên sao chỉ Set FDFS = Nothing mà ko cần Set Filt = Nothing.