我們很多時候在用Excel VBA去實現(xiàn)某一個功能的時候,也許會用到很多行的代碼去實現(xiàn)我們最終要的結(jié)果。
可是有時候你殊不知,有些代碼是經(jīng)過錄制宏產(chǎn)生的,或者語句繁瑣,變量不正確從而造成你所寫的程序運行的時間非常久,或者造成計算機的CPU使用率達(dá)到100%,嚴(yán)重可導(dǎo)致系統(tǒng)崩潰發(fā)生。
但是這樣的結(jié)果顯而易見,并不是我們想要的結(jié)果。
我們想要的是一個可靠的,高效率的,簡化操作的,提高勞工效率,減少錯誤率的,適應(yīng)性強的程序。
所以我們不得不尋求更好的方法去改善,去優(yōu)化代碼,以尋求高效率完成我們的工作。
下面我們重點和大家分享一下,怎么去優(yōu)化我們的代碼:
1.關(guān)閉屏幕刷新,速度可以提升30%的速度。所以大家在寫完代碼的時候,不妨在我們程序最開始加上這句話,當(dāng)然在程序執(zhí)行完之前,也就是最后一句話的時候,你要記得將屏幕刷新打開。
Sub test()
Application.DisplayAlerts = False
Cells(1, 1) = 1
Application.DisplayAlerts = True
End Sub
2. 使用工作表函數(shù),這句話的意思就是說我們某些時候,可以優(yōu)先考慮Excel自帶的函數(shù)去實現(xiàn)這個,而不是我們自己去寫代碼。當(dāng)然效果都是一樣的,但是時間可能就不是一樣。
Sub ShtFunctions()
a.使用循環(huán)進(jìn)行數(shù)據(jù)累加計算
For i = 1 To 40000
MySum = MySum Cells(i, 1)
Next
b.直接使用工作表進(jìn)行求和
Cells(1, 1) = Application.Sum(Range('A1:A40000'))
End Sub
3. 使用With-End With語句,減少引用對象的尋找速度,提高程序的效率。當(dāng)然這樣還有一個優(yōu)點,就是我們要改變引用對象的時候,只需改變一個位置即可,這樣也便于后期的維護(hù)和修改。
Sub test()
With Range('E5').Font
.Color = -16776961
.Font.Bold = True
.Name = '宋體'
.Size = 9
.Name = 'Arial Unicode MS'
.Size = 9
End With
End Sub
4.數(shù)據(jù)類型的正確選用,這個也是非常關(guān)鍵的。這個就好像你去打水喝,正確的應(yīng)該是拿杯子過去,但是你拿著一個很大的桶去接水喝,當(dāng)然都可以完成喝水這個動作,但是明顯就可以看出拿桶的那個人選擇就有問題。
其實在我的Excel中處理數(shù)據(jù)的能力也是不一樣的,處理速度最快的是long>integer>byte>Single>Double>Currency。
需要注意的是,如果我們不定義變量,那么系統(tǒng)默認(rèn)為Variant類型,當(dāng)我定義合適,速度就會有提升,所以每次我們千萬記得要選擇最合適自己的啦!
5.使用數(shù)組,數(shù)組和字典是VBA的核心功能,所有在可以使用數(shù)組的時候,千萬記得使用數(shù)組。在某些時候,在使用數(shù)組和不使用數(shù)組對比下,速度可能相差100倍。
盡量減少變量的使用,增加數(shù)組和字典的配套使用。
還有就是多使用動態(tài)的數(shù)據(jù),少使用靜態(tài)的數(shù)據(jù),數(shù)組的Redim和Preserve要常記得。
6.多清除對象的緩存,比如 Set d = Nothing,這句話的意思就是卸除對象的引用。這樣也可以稍微加快一點執(zhí)行的速度。
另外我們可以通過減少循環(huán)的次數(shù),減少類模塊的使用,減少模塊的使用,減少我們語句中的激活的次數(shù),或者尋找更優(yōu)質(zhì)效率更高的代碼。
以上就是自己在學(xué)習(xí)VBA的時候,自己的一點點優(yōu)化代碼的一點點方法,可能還有其他的更好的優(yōu)化只能慢慢去了解去學(xué)習(xí),慢慢積累。
雖然Excel VBA并不萬能的,但是能幫助我們提高工作效率,就已經(jīng)足夠讓你我欣慰。與君共勉之!
PS:學(xué)習(xí)的苦難需要我們主動面對,生活的苦難你躺著它自己主動就過來啦!與君共勉!!!
以上就是今天要和大家分享的技巧,希望對大家有所幫助,祝各位一天好心情!
唯有不斷學(xué)習(xí),才能不被淘汰!
Excel中每一個方法都有特定的用途,不是他們沒有用處,只是你不了解或者暫時用不著,建議你收藏起來,萬一哪天用著呢?
聯(lián)系客服