- Tham gia
- 30/5/06
- Bài viết
- 1,630
- Được thích
- 17,442
- Nghề nghiệp
- Bác sĩ
1/ Tăng tốc và không cho màn hình nhấp nháy (flickering):
Sub NoScreenRePainting()
Application.ScreenUpdating=False
'Dat code cua ban o day
Application.ScreenUpdating=True
End Sub
2/ Ngăn chặn việc tính toán trong khi thi hành mã:
Sub NoCalculations()
Application.Calculation = xlCalculationManual
'Dat code cua ban o day
Application.Calculation = xlCalculationAutomatic
End Sub
3/ Tăng tốc nếu bạn có Events của Worksheet hay Workbook:
Sub StopAllEvents()
Application.EnableEvents = False
'Dat code cua ban o day
Application.EnableEvents = True
End Sub
4/ Sử dụng khai báo With khi làm việc với các đối tượng:
Sub WithARange()
With Range("A1")
.Value = 100
.Font.Bold = True
.Interior.ColorIndex = 6
.Copy Destination:=Range("B1")
End With
End Sub
5/ Sử dụng VbNullString thay vì dùng = ""
Sub EmptyText()
Dim strWords As String
strWords = "Cats"
MsgBox strWords
strWords = vbNullString
MsgBox strWords
End Sub
6/ Đưa vào công thức tương đối vào nhiều ô (a range of cells):
Nhanh hơn là AutoFill hay Copy.
Sub NoAutoFillOrCopy()
Range("A1:A200").FormulaR1C1 = "=SUM(RC[1]:RC[5])"
End Sub
7/ Tránh sử dụng Copy và Paste bất cứ khi nào có thể:
Sub NoCopyAndPaste()
'Thay vi:
Sheet1.Range("A1:A200").Copy Destination:=Sheet2.Range("B1")
'Thi su dung:
Sheet2.Range("B1:B200").Value= Sheet1.Range("A1:A200").Value
'Hay:
Sheet2.Range("B1:B200").Formula = Sheet1.Range("A1:A200").Formula
'Thay vi:
Sheet1.Range("A1:A200").Copy
Sheet1.Range("A1:A200").PasteSpecial xlPasteValues
'Thi su dung:
Sheet1.Range("A1:A200") = Sheet1.Range("A1:A200").Value
End Sub
Luôn luôn khai báo biến đúng!
Để xem nhanh các biến đã định nghĩa:
- Chọn biến mà bạn muốn định nghĩa.
Bạn vào View>Definition (Shift+F2)
- Để trở về vị trí trước:
Bạn vào View>Last Postition (Ctrl+Shift+F2).
8/ Trả lại bộ nhớ từ biến Object :
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
9/ Tránh sử dụng If, Else bất cứ khi nào có thể
Thông thường người ta sử dụng cấu trúc If, Else để kiểm tra điều kiện đúng hay sai. Tuy vậy có một phương thức nhanh hơn "một tí". Hai ví dụ sau đây, ví dụ đầu sử dụng phương thức thường sử dụng, ví dụ hai sử dụng phương thức nhanh hơn. Và dĩ nhiên đối với những ví dụ nhỏ thì thường sự khác nhau không lớn lắm.
Sub TrueOrFalseSlower()
Dim bYesNo As Boolean
Dim i As Integer
If i = 5 Then
bYesNo = True
Else
bYesNo = False
End If
MsgBox bYesNo
End Sub
Và đây là cách tốt hơn
Sub TrueOrFalseFaster()
Dim bYesNo As Boolean
Dim i As Integer
bYesNo = (i = 25)
MsgBox bYesNo
End Sub
Tương tự như vậy cách chung để chuyển đổi biến giữa True và False phụ thuộc vào các điều kiện, ta có thể làm theo cách tốt hơn như sau:
Cách thông thường:
Sub ToggleTrueOrFalseSlower()
Dim bYesNo As Boolean
If bYesNo = False Then
bYesNo = True
Else
bYesNo = False
End If
MsgBox bYesNo
End Sub
Đây là cách tốt hơn
Sub ToggleTrueOrFalseFaster()
Dim bYesNo As Boolean
bYesNo = Not bYesNo
MsgBox bYesNo
End Sub
Lược dịch từ internet.
Mọi ý kiến của các bạn xin gởi cho tôi theo địa chỉ email sau:
levanduyet@yahoo.com
Sub NoScreenRePainting()
Application.ScreenUpdating=False
'Dat code cua ban o day
Application.ScreenUpdating=True
End Sub
2/ Ngăn chặn việc tính toán trong khi thi hành mã:
Sub NoCalculations()
Application.Calculation = xlCalculationManual
'Dat code cua ban o day
Application.Calculation = xlCalculationAutomatic
End Sub
3/ Tăng tốc nếu bạn có Events của Worksheet hay Workbook:
Sub StopAllEvents()
Application.EnableEvents = False
'Dat code cua ban o day
Application.EnableEvents = True
End Sub
4/ Sử dụng khai báo With khi làm việc với các đối tượng:
Sub WithARange()
With Range("A1")
.Value = 100
.Font.Bold = True
.Interior.ColorIndex = 6
.Copy Destination:=Range("B1")
End With
End Sub
5/ Sử dụng VbNullString thay vì dùng = ""
Sub EmptyText()
Dim strWords As String
strWords = "Cats"
MsgBox strWords
strWords = vbNullString
MsgBox strWords
End Sub
6/ Đưa vào công thức tương đối vào nhiều ô (a range of cells):
Nhanh hơn là AutoFill hay Copy.
Sub NoAutoFillOrCopy()
Range("A1:A200").FormulaR1C1 = "=SUM(RC[1]:RC[5])"
End Sub
7/ Tránh sử dụng Copy và Paste bất cứ khi nào có thể:
Sub NoCopyAndPaste()
'Thay vi:
Sheet1.Range("A1:A200").Copy Destination:=Sheet2.Range("B1")
'Thi su dung:
Sheet2.Range("B1:B200").Value= Sheet1.Range("A1:A200").Value
'Hay:
Sheet2.Range("B1:B200").Formula = Sheet1.Range("A1:A200").Formula
'Thay vi:
Sheet1.Range("A1:A200").Copy
Sheet1.Range("A1:A200").PasteSpecial xlPasteValues
'Thi su dung:
Sheet1.Range("A1:A200") = Sheet1.Range("A1:A200").Value
End Sub
Luôn luôn khai báo biến đúng!
Để xem nhanh các biến đã định nghĩa:
- Chọn biến mà bạn muốn định nghĩa.
Bạn vào View>Definition (Shift+F2)
- Để trở về vị trí trước:
Bạn vào View>Last Postition (Ctrl+Shift+F2).
8/ Trả lại bộ nhớ từ biến Object :
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
9/ Tránh sử dụng If, Else bất cứ khi nào có thể
Thông thường người ta sử dụng cấu trúc If, Else để kiểm tra điều kiện đúng hay sai. Tuy vậy có một phương thức nhanh hơn "một tí". Hai ví dụ sau đây, ví dụ đầu sử dụng phương thức thường sử dụng, ví dụ hai sử dụng phương thức nhanh hơn. Và dĩ nhiên đối với những ví dụ nhỏ thì thường sự khác nhau không lớn lắm.
Sub TrueOrFalseSlower()
Dim bYesNo As Boolean
Dim i As Integer
If i = 5 Then
bYesNo = True
Else
bYesNo = False
End If
MsgBox bYesNo
End Sub
Và đây là cách tốt hơn
Sub TrueOrFalseFaster()
Dim bYesNo As Boolean
Dim i As Integer
bYesNo = (i = 25)
MsgBox bYesNo
End Sub
Tương tự như vậy cách chung để chuyển đổi biến giữa True và False phụ thuộc vào các điều kiện, ta có thể làm theo cách tốt hơn như sau:
Cách thông thường:
Sub ToggleTrueOrFalseSlower()
Dim bYesNo As Boolean
If bYesNo = False Then
bYesNo = True
Else
bYesNo = False
End If
MsgBox bYesNo
End Sub
Đây là cách tốt hơn
Sub ToggleTrueOrFalseFaster()
Dim bYesNo As Boolean
bYesNo = Not bYesNo
MsgBox bYesNo
End Sub
Lược dịch từ internet.
Mọi ý kiến của các bạn xin gởi cho tôi theo địa chỉ email sau:
levanduyet@yahoo.com