1. Tt cc ch cp nht mn hnh v cc ch khc tng tc thc hin code
Code: Option Explicit Public glb_origCalculationMode As Integer Sub SpeedOn(Optional StatusBarMsg As String = "Running macro...") ' Ch : y cc bn c th thay i thng bo ' bng cch truyn vo chui UNICODE vo bin StatusBarMsg glb_origCalculationMode = Application.Calculation With Application .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False .DisplayAlerts = False .Cursor = xlWait .StatusBar = StatusBarMsg .EnableCancelKey = xlErrorHandler End With End Sub Sub SpeedOff() With Application .Calculation = glb_origCalculationMode .ScreenUpdating = True .EnableEvents = True .DisplayAlerts = True .CalculateBeforeSave = True .Cursor = xlDefault .StatusBar = False .EnableCancelKey = xlInterrupt End With End Sub Sub FillSlow() Dim c As Range, r As Range, startTime, EndTime Set r = Range("A1:C1000") r.ClearContents startTime = Timer For Each c In r c.Select c.Formula = "=Row()*Column()" Next c DoEvents EndTime = Timer MsgBox "Total Time: " & EndTime - startTime [A1].Select End Sub Sub FillFast() Dim c As Range, r As Range, startTime, EndTime Set r = Range("A1:C1000") r.ClearContents startTime = Timer On Error Goto ResetSpeed SpeedOn For Each c In r c.Select c.Formula = "=Row()*Column()" Next c DoEvents EndTime = Timer MsgBox "Total Time: " & EndTime - startTime [A1].Select ResetSpeed: SpeedOff End Sub Ngun t y.
Cch dng: Xin xem v d FillSlow v FillFast trn. Bn s gi th tc tng tc khi thc hin cc on m bng cch gi th tc SpeedOn v gi li th tc SpeedOff mi khi bn hon tt.
Ch : Nu cc on m ca bn c s dng kt qu tnh ton ca mt cng thc, th bn nn xem xt hoc chnh sa cc th tc trn cho ph hp vi cng vic ca mnh.
L Vn Duyt 1. 2. Truy cp n mt trong vng - Accessing Cells In A Range
Gi s ti c d liu ti Sheet1, vng Code: A1:B10 , v ti t tn l "MyRange", ti mun tham chiu n B5:
Nguyn vn bi Bi ton t ra Lm th no tham chiu n cc trong (mang tnh tng i, s gii thch phn sau) vng d liu A1:B10 (tn MyRange) l nhanh nht? Cu tr li: Thay v tham chiu
Code: Range("MyRange").Cells(5,2) ta dng
Code: Range("MyRange")(5,2) Ngoi ra khi tham chiu n A1, cc bn c th dng code Cch 1: Code: Range("A1") hoc Cch 2: Code: [A1] Trong hai cch trn, cch 2 ngn gn hn nhng s chm hn cch 1.
Ni thm v tham chiu kiu ny:
Code: Range("A1:B10")(5,2) ' Tham chiu n B5 Range("A1:B10")(1,1) ' Tham chiu n A1 Range("B2:C10")(0, 0) ' Tham chiu n A1, cc bn ch ! Range("C3:D10")(-1, -1) ' Tham chiu n A1, cc bn ch ! Range("A1:B10")(5,2)(5,2) ' Tham chiu n C9 Range("A1:B10")(5,3) ' Tham chiu n C5 Range("A1:B10")(12,13) ' Tham chiu n M12
Range("A1:B10")(1) ' Tham chiu n A1 Range("A1:B10")(2) ' Tham chiu n B1 Range("A1:B10")(3) ' Tham chiu n A2 Range("A1:B10")(4) ' Tham chiu n B2 Vic tham chiu khi dng mt s (Range("A1:B10")(3)) s i t tri qua phi, sau xung mt hng v li tip tc t tri qua phi.
Di chuyn theo hng:
Code: Range("D4")(1) ' Tham chiu n D4 Range("D4")(2) ' Tham chiu n D5 Range("D4")(3) ' Tham chiu n D6 Di chuyn theo ct:
Code: Range("D4").Columns(1) ' Tham chiu n D4 Range("D4").Columns(2) ' Tham chiu n E4 Range("D4").Columns(3) ' Tham chiu n F4 Cc bn c th c thm bi vit v cc kiu tham chiu ti y.
3. Khi tham chiu n mt sheet - Collection Indexes:
Khi tham chiu n mt sheet bn c th tham chiu bi Tn hoc S nh, Cch 1:
Code: Worksheets("Sheet1") Cch 2:
Code: Worksheets(1) Tham chiu cch 2 s nhanh hn. Nhng ch , s tham chiu ny c th s thay i, chnh v iu ny an ton th tham chiu cch mt vn an ton hn v d thay i hn.
4. Khai bo sm - Early Binding:
i khi khi lp trnh chng ta s tham chiu n mt s i tng th vic khai bo sm (Early Binding: c th hiu l tng minh, v nu bn khai bo l Object (i tng), th chng trnh phi mt thi gian d tm) s nhanh hn. V d sau ti tham chiu n i tng Word: Th khai bo sau
Code: Dim WordObj As Word.Application s gip thc thi nhanh hn
Code: Dim WordObj As Object 5. Ch khi dng vng lp FOR EACH: Bn nn dng vng lp FOR EACH nh sau:
Code: Dim WS as Worksheet For Each WS In Worksheets MsgBox WS.Name Next WS thay v dng
Code: Dim i as Integer For i = 1 To Worksheets.Count MsgBox Worksheets(i).Name Next i
6. Trnh s dng SELECT: Gi s ti c nhiu shape trn mt sheet, ti mun a ch "Hello" vo cc shape ny.
Thay v s dng SELECT
Code: For i = 0 To ActiveSheet.Shapes.Count ActiveSheet.Shapes(i).Select Selection.Text = "Hello" Next i thif ti dng trc tip nh sau, s nhanh hn
Code: For i = 0 To ActiveSheet.Shapes.Count ActiveSheet.Shapes(i).TextEffect.Text = "Hello" Next i 7. c v ghi trn mt khi d liu ln : Vn ny, ngi vit cng tng gp, nht l khi phi lm vic vi khi d liu ln. V d nh: khi vit chng trnh ly d liu t tp tin Excel t Visual Basic 6. Khi vit code, bn cn ch lm gim thiu vic truyn d liu t Excel v code ca bn. Code 1:
Code: Dim DataRange As Range Dim Irow As Long Dim Icol As Integer Dim MyVar As Double Set DataRange = Range("A1:C10000")
For Irow = 1 To 10000 For Icol = 1 To 3 MyVar = DataRange(Irow, Icol) ' c gi tr t Excel If MyVar > 0 Then MyVar = MyVar * MyVar ' Thay i cc gi tr DataRange(Irow, Icol) = MyVar ' a cc gi tr ngc vo Excel End If Next Icol Next Irow Code 2:
Code: Dim DataRange As Variant Dim Irow As Long Dim Icol As Integer Dim MyVar As Double DataRange = Range("A1:C10000").Value ' c tt c cc gi tr t Excel mt ln, v a vo mng
For Irow = 1 To 10000 For Icol = 1 To 3 MyVar = DataRange(Irow, Icol) If MyVar > 0 Then MyVar = MyVar * MyVar ' Thay i cc gi tr trong mng DataRange(Irow, Icol) = MyVar End If Next Icol Next Irow Range("A1:C10000").Value = DataRange ' a li cc gi tr t mng vo Excel mt ln Code 2 s nhanh hn. Vy cc bn ch cc code sau:
Code: DataRange = Range("A1:C10000").Value Code: Range("A1:C10000").Value = DataRange v khai bo bin l kiu Variant
Code: Dim DataRange As Variant s lm cho chng trnh ca bn nhanh hn.
i khi ngi ta cn dng hm sau (cng ch l vn ti ni trn)
Code: Function ExcelToVBA(Rng As Range) Dim Arr As Variant Arr = Rng.Value End Function Ngoi ra, cc bn nn tham kho topic bn v cch lm vic vi mng ti y.
8. S dng cc hm sn c ca Excel:
Nn dng cc hm sn c ca Excel. V d sau dng hm SUM cho vng A1:A100
Code: MySum = Application.WorksheetFunction.Sum(Range("A1:A100")) Bn ng vit li code nh sau:
Code: For Each C In Range("A1:A100") MySum = MySum + C.Value Next C 9. Trnh s dng Application.Volatile khi c th
10. Trnh s dng OFFSET, nn dng ging nh mc 2
Tng hp. L Vn Duyt 1. 11. S dng cc kiu d liu ph hp vi nhau: VBA qu d gii, chnh v th m i khi trong cc on m chng ta li i so snh hai bin khng h ging nhau. trnh nhng li ng tic xy ra, trc khi truyn bin cho mt th tc, hay gn mt bin cho mt bin khc, lun lun phi chc chn rng cc kiu bin ca chng phi ging nhau.
12. Thc hin chuyn i trc tip, thay v phi VBA t quyt nh: Khi hai bin khng cng kiu d liu, bn nn thc hin vic chuyn i kiu d liu nh CStr(), CDbl() vv... Bng vic thc hin ny, bn s gip tit kim thi gian thay v phi VBA a ra quyt nh.
13. S dng Len(chui)=0 thay v dng chui ="": VBA lu tr chui trong b nh bng vic lu chiu di ca chui, c theo sau bi cc k t chui ny cha. Chnh v vy vic so snh chiu di ca chui nh Len(chui)=0 s nhanh hn.
14. S dng Left$, Right$, Mid$ ... thay v dng Left, Right v Mid