我們應該都知道Excel VBA的功能比較強大,但是對於剛開始學習的我們來說,面對那一串串英文代碼,你是不是看得頭昏腦脹?想去學習,然和茫然久久不能找不到學習入口?
在這裡,和大家分享自己的學習經驗,和大家一起學習,共同進步。對了,還要告訴大家,我也是初學者,不是高手,如果有什麼說得不對的,希望大家及時指出。我的目的並不是教學,而是期望創造一個學習Excel VBA的氛圍! 記住一個共同的目標——掀開那層神秘的面紗,看看VBA的真實面目。
首先我們要學習什麼是VBA?就的先去了解他的真實面貌,VBA是Visual Basic For Application的簡稱,具體說來,可能讓幾天幾夜也都說不完,你應該也知道VBA是建立在Office中的一種應用程式開發工具,其實知道這也就夠了。
Excel本身的內置函數其實已經很強大了,甚至有人說,只要學會二三十個函數,就已經可以滿足普通用戶日常的工作需求。那我們為什麼要學VBA?
是的,如果只需要滿足一些普通的工作需求可能永遠也不會用到VBA,但在實際應用的過程中,人們的操作卻越來越大,需要也越來越高,這時候就需要用VBA來對Excel進行二次開發了,VBA可以有效地自定義和擴展Excel的功能。但有一點想要告訴大家,VBA功能很強大,但並不是萬能的,也並不是所有工作都需要用VBA來解決,也並不是所有工作用VBA來解決都會很簡單,這要根據實際情況而定,有些工作你用VBA來解決的話相反會變得很麻煩。
換一種語言表達出來說VBA不是一種程序語言吧, 不公平, 它的確提供了程序語言能完成的功能; 說它是吧, 和現代程序語言相比功能又很不完整。說它不是面向對象的語言吧, 它有類模塊, 提供部分類的功能; 說它是面向對象的吧, 類的最只要的特點又不具備。當然了,這些主要都是從VB6繼承過來 的"遺傳病"。所以通常的結論:"基於對象, 但非面向對象"。MS早就停止VB6的升級了, MS對VB6的放棄直接導致了VBA的功能不會在本質上變得更加強大, 但未嘗不是一件好事,作為使用者不用整天跟著屁股後面學習新的功能。事物發展就是這樣的,在解決了一個問題的同時又帶來另一個新問題。
設計VBA就是面向"終級用戶"類似於數據透視表的"office 高級應用工具", 以腳本的形式存在, 用來達到"自動化驅動office來完成規律性, 重複性任務"的目的。嚴格來講VBA不是為了"開發"而是為了"應用", 並不是說完全做不到二次開發, 但和 MS 設計 VBA 的本意不相符甚至是背離。更加不是"無所不能"的程序語言,有太多的事是 VBA 實現不了的,嚴格來說它都不是一種程序開發語言,只能算作腳本。他和API函數結合可以做到,很多VBA不能完成的事情。
PS:API函數當然有用,開發圖形庫必須用它!
我們下面說說VBA的優缺點:
1:作為程序語言和其他開發語言比較,VBA的特點:
(1)"天然"強大的輸入輸出平臺,Excel的控制項功能非常強大
(2)使用便捷,無需搭建任何環境,隨時可以用,無需保存,編譯,即可運行;代碼數據一體化(同時也是"缺點"),發布簡單,無需運行環境。
(3)簡單易懂,門檻低,學習周期短
2:VBA的"缺點"
(1)不好封裝
(2)需要宿主解釋器的解析,所以速度慢
(3)安全性差
(4)無法提供面向對象的結構式編程方式
(5)單線程
PS:上述"缺點"基本上是腳本語言具有普遍性的"通病",顯然VBA就不是針對完成上述功能而設計的。VBA最大的缺點明明就是不能在windows以外的平臺使用,像Mac上的Excel,雖然有vba,但是基本只能發揮30%不到的功能,字典這種需要調用windows系統裡面功能的東西就沒法用了,包括正則表達式,調資料庫、fso文件之類的東東。
新手學習的幾點建議
1:調試 地方窗口,立即窗口,觀察窗口,F1(幫助),F2(屬性方法),F8(分步執行)途中診斷:斷點,stop等等。
2:分拆 語句分拆長而難懂的句子分拆成基本單元,利用調試功能一個個解決,很容易就理解了它的含義。
3:耐心 學習目的明確≠急於求成。學習的進程總是遵循漸進式的規律,跳躍式的一夜暴富只能是空中樓閣,所以耐心在學習過程中就顯得尤為重要。
我們每次如果要開始寫程序,首先先想下正常處理數據的過程,然後在轉換成vba數據處理的過程,僅此而已。每次用到的Excel VBA無非就是以下幾種方法:
(1)對象的使用方法,當我不知道代碼怎麼去寫的時候,我們知道錄製宏就可以,然後可以調用Excel內置應用;
(2)程序語法類:循環,判斷,字符串,文件操作等;
(3)數據處理的方式,數組,字典
(4)界面,系統等等;這個用的比較少。
(5)類模塊;
學會了循環,判斷,字典,能應用到日常工作中,將繁瑣重複的部分交給電腦,就沒繼續深入研究了,因為夠用就好學以致用最重要,會的再多用不到也是白搭,一個人精力有限不可能所有東西都學會。
另外需要說的一點是,其實VBA效率不算高,複雜程度不算低,總體給人感覺一般。但是任何一個工具只要熟練了,那就是你最好的工具。相信,實踐,理解,這可謂是工具認知的一條康莊大道。
我們學習Excel VBA的內容充其量內容就這麼多了, 學習VBA是可以有止境的, 差不多的時候是完全可以收手的, 就算這些內容也完全不用全部學會, 夠用就可以收手。寫這個程序,其實最主要的是思考如何用程序語言去完成,因為VBA其實操作方法和語句不多,知道如何操作了,就知道如何去寫代碼。另外送一句話給我們的初學者,看書上的代碼再多,再簡單,也要自己嘗試去寫。我們不怕遇到錯誤,就怕你不敢去邁出那一步。只要你邁出了前進的那一步,你堅持下去了,就會發現勝利終究會屬於你的。
用一句話來總結:"程序的本質是用機器來解放勞動力,而不是用勞動力解放機器!"
唯有不斷學習,才能不被淘汰!