自用Excel VBA技巧整理
1、如果想讓圖表隨著原始數(shù)據(jù)更新,就不能直接使用源數(shù)據(jù)的值,而要引用其Address(還必須是R1C1格式),例如:
猛擊展開(kāi) 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ù)是由公式通過(guò)原始數(shù)據(jù)間接得出,如VLOOKUP
'那么原始數(shù)據(jù)變化后圖表不會(huì)自動(dòng)更新,即使其源數(shù)據(jù)已經(jīng)更新
也遇到過(guò)公式實(shí)在多,運(yùn)行慢,圖表怎么也不更新的excel文件,就只有手動(dòng)寫Worksheet_Change對(duì)應(yīng)的圖表重畫了。。
?
2、VBA的邏輯運(yùn)算AND、OR不是短路的。。倒是VB.Net里面有短路的AndAlso、OrElse。
?
3、用類型說(shuō)明符聲明變量,String$、Integer%、Long&、Double#。我不喜歡顯式寫Dim,這種在VBA中能同時(shí)聲明類型并賦值的方法很對(duì)胃口。
猛擊展開(kāi) 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????'使用的時(shí)候可以不帶類型說(shuō)明符
????MsgBox?l&???'當(dāng)然也可以帶
End?Sub
?
4、最快遍歷一個(gè)很大的Range的方法?See Here。是官方blog上的,大意是用大范圍Range的值(一個(gè)Variant數(shù)組)代替不停取小Range(比如取一個(gè)Cell)。有機(jī)會(huì)帶Timer()實(shí)踐下。
?
5、很多時(shí)候在單元格里面用自定義Function是個(gè)不錯(cuò)的選擇,比如可以寫點(diǎn)功能更強(qiáng)的VLOOKUP之類的。現(xiàn)在我傾向于看具體情況把VBA、內(nèi)置公式和自定義函數(shù)混用,而不是只用公式或只用VBA。(當(dāng)然,自定義函數(shù)畢竟是解釋執(zhí)行的,感覺(jué)比自帶公式慢,小心使用。如果用的灰常多的話,寫個(gè)DLL吧。。)
?
6、裝個(gè)MZ-Tools開(kāi)發(fā)體驗(yàn)稍微好一些。VBE多少年沒(méi)更新了,作為IDE來(lái)講實(shí)在比較挫了。(VSTO、VSTA淚奔。。)
?
7、進(jìn)行大量計(jì)算和寫入的時(shí)候最好把UI和公式更新關(guān)掉(特別是有很多公式的話,寫單元格的時(shí)候把Calculation改成Manual):
猛擊展開(kāi) Sub?SophisticatedWork()????Application.ScreenUpdating?=?False
????Application.Calculation?=?xlCalculationManual
????
????'中間的計(jì)算如果依賴一些值的最新版本
????'則手動(dòng)調(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技巧整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Javascript--节点类型
- 下一篇: 字符编码解码整合工具