Makró futási idejének mérése, avagy mennyi ideig fut a makrónk?
Gyakorta előfordul, hogy szeretnénk tudni, mennyi ideig tart lefuttatni a kódunkat különböző számítógépeken. Vagy frissítjük a kódot és arra vagyunk kíváncsiak, gyorsabb/lassabb lett-e. Esetleg teljesen átírtuk és összevetjük az előző verzióval.
Az alábbi videómban két módot ismertetek a makró futási idejének mérésére. Az elsőnél a “Timer” funkció a kulcs míg a másodiknál a “Now” funkció.
Az adott munkafüzetbe szúrjunk be egy modult a Visual Basic szerkesztőjében és az alábbi kódot adjuk hozzá:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub MakroFuttatasIdotartam() Dim i As Long, InduloIdo As Single 'készítette: XLMotyo 'mennyi ideig tart amíg lefut a kód. Üres munkafüzethez adjuk hozzá (modulhoz) a kódot majd futtassuk le 'kód hátránya: nem mûködik megfelelõen, ha a makró futtatása éjfél elõtt kezdõdik és éjfél után fejezõdik be. 'Megoldás: lásd a "Sub MakroFuttatasIdotartam_v02" kódot lent InduloIdo = Timer 'a szaggatott vonalak közötti kódot helyettesíteni a sajáttal '-------------------------------------------------------------------------------------------------------- Sheet1.Cells.Clear For i = 1 To 95000 'ha túl sokáig fut a makró: csökkenteni a 95000-et, ha túl gyorsan fut a makró: növelni Cells(i, 1) = i Next i '--------------------------------------------------------------------------------------------------------- 'Kiíratjuk a végeredményt: 'MsgBox "A makró " & Round(Timer - InduloIdo, 3) & " másodperc alatt futott le", , "" MsgBox "Makró lefutási ideje:" & vbNewLine & vbNewLine & Format((Timer - InduloIdo) / 86400, "hh:mm:ss") & vbNewLine & "(óra:perc:másodperc)", , "" '86400 = 24*60*60 End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub MakroFuttatasIdotartam_v02() Dim InduloIdo As Double, i As Long 'forrás: https://www.thespreadsheetguru.com/the-code-vault/2015/1/28/vba-calculate-macro-run-time 'kód megfelelõen mûködik, ha a makró futtatása éjfél elõtt kezdõdik és éjfél után fejezõdik be 'nem annyira precíz a másodpercekben mért eredmény, mint az elõzõ ("Sub MakroFuttatasIdotartam") kódnál, általában egész számot ad vissza InduloIdo = Now() 'a szaggatott vonalak közötti kódot helyettesíteni a sajáttal '-------------------------------------------------------------------------------------------------------- Sheet1.Cells.Clear For i = 1 To 95000 'ha túl sokáig fut a makró: csökkenteni a 95000-et, ha túl gyorsan fut a makró: növelni Cells(i, 1) = i Next i '--------------------------------------------------------------------------------------------------------- 'Kiíratjuk a végeredményt: MsgBox "A makró " & Round((Now() - InduloIdo) * 86400, 3) & " másodperc alatt futott le", , "" End Sub |
Videó:
Remélem hasznos volt a poszt.
Mintafájlért illetve kérdésekkel kapcsolatosan szólj hozzá lent vagy dobj egy emailt: xlmotyo@gmail.com