自用Excel VBA技巧整理
1、如果想讓圖表隨著原始數(shù)據(jù)更新,就不能直接使用源數(shù)據(jù)的值,而要引用其Address(還必須是R1C1格式),例如:
猛擊展開 Dim?s?As?Series...
Set?rg?=?Range(Worksheets("SheetXXX").Cells(1,?2),?Worksheets("SheetXXX").Cells(6,?2))
...
s.Values?=?"='SheetXXX'!"?&?rg.Address(ReferenceStyle:=xlR1C1)
's.Values?=?rg.Value?這樣寫的壞處:
'如果圖表的源數(shù)據(jù)是由公式通過原始數(shù)據(jù)間接得出,如VLOOKUP
'那么原始數(shù)據(jù)變化后圖表不會自動更新,即使其源數(shù)據(jù)已經(jīng)更新
也遇到過公式實在多,運行慢,圖表怎么也不更新的excel文件,就只有手動寫Worksheet_Change對應的圖表重畫了。。
?
2、VBA的邏輯運算AND、OR不是短路的。。倒是VB.Net里面有短路的AndAlso、OrElse。
?
3、用類型說明符聲明變量,String$、Integer%、Long&、Double#。我不喜歡顯式寫Dim,這種在VBA中能同時聲明類型并賦值的方法很對胃口。
猛擊展開 Sub?TypeDeclare()????s$?=?"abc"??'String
????i%?=?32767??'Integer,?2?bytes
????l&?=?32768??'Long,?4?bytes
????f!?=?1.5????'Single,?4?bytes
????d#?=?0.0001?'Double,?8?bytes
????c@?=?0.00000000001??'Currency,?8?bytes
????
????MsgBox?s????'使用的時候可以不帶類型說明符
????MsgBox?l&???'當然也可以帶
End?Sub
?
4、最快遍歷一個很大的Range的方法?See Here。是官方blog上的,大意是用大范圍Range的值(一個Variant數(shù)組)代替不停取小Range(比如取一個Cell)。有機會帶Timer()實踐下。
?
5、很多時候在單元格里面用自定義Function是個不錯的選擇,比如可以寫點功能更強的VLOOKUP之類的。現(xiàn)在我傾向于看具體情況把VBA、內(nèi)置公式和自定義函數(shù)混用,而不是只用公式或只用VBA。(當然,自定義函數(shù)畢竟是解釋執(zhí)行的,感覺比自帶公式慢,小心使用。如果用的灰常多的話,寫個DLL吧。。)
?
6、裝個MZ-Tools開發(fā)體驗稍微好一些。VBE多少年沒更新了,作為IDE來講實在比較挫了。(VSTO、VSTA淚奔。。)
?
7、進行大量計算和寫入的時候最好把UI和公式更新關(guān)掉(特別是有很多公式的話,寫單元格的時候把Calculation改成Manual):
猛擊展開 Sub?SophisticatedWork()????Application.ScreenUpdating?=?False
????Application.Calculation?=?xlCalculationManual
????
????'中間的計算如果依賴一些值的最新版本
????'則手動調(diào)用?Application.Calculate
????
????Application.Calculation?=?xlCalculationAutomatic
????Application.ScreenUpdating?=?True
End?Sub
?
?
?
To Be Continued ...
轉(zhuǎn)載于:https://www.cnblogs.com/dxz/archive/2009/12/15/vba-tricks-collection.html
總結(jié)
以上是生活随笔為你收集整理的自用Excel VBA技巧整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript--节点类型
- 下一篇: iPhone如何设置黑名单?