一年前我畢業工作,以為Excel隻是複制粘貼,調整格式。
機緣巧合工作恰好是要用到VBA,仿照同僚的代碼隻會寫最基本的Function語句:IF...Else...
四個月前新增賬號,那會幾乎什麼都不懂。雖然寫了幾個月的Function,但是Sub是毛都不知道,還有就是我也算是0基礎。
四個月後(中間兩個月去炒股了,想想都後悔。。。),學會的也隻是用數組,字典的部分用法。還有部分雜七雜八的東西,有些囫囵吞棗了。
好歹自己整理了一個大大的檔案夾,各種代碼都有。腦子裡有了一些底子了,算是邁出了第一步。
VBA的很多部分,特别是數組和字典,還是很容易接受的。VBA數組,我是和函數數組互相印證學習的,感覺比函數數組簡單。字典,對我來說,就是進階版的VLOOKUP,是以學習起來沒有太多困難。而學會了字典,等于完全掌握了一個對象的學習過程,再學其它的,變得容易很多。。是以可能學習VBA就是要有一個敲門磚,這個磚找對了,門一下子敲開了,路就好走很多。希望你能找到自己的磚。
隻會不是很難的函數。其他的都不懂。聽說VBA是學不完的,是以想學到一般的程度。以下幾點送給你初學的你
1:調試
經常看到新手學習了很長時間的VBA之後仍然不會使用調試功能, 一遇到問題馬上就請教他人, 這樣不利于自身的成長。調試非常重要, 是學習代碼本身
不可或卻的一部分。是診斷, 梳理代碼邏輯的過程, 可以避免邏輯錯誤的重複性發生。善用調試新手很多的問題都可以得到解決, 即可擺脫對他人的依賴性,
自身又得到長足的進步, 一舉兩得。
三個視窗, 三個功能鍵:
地方視窗, 立即視窗, 觀察視窗, F1(幫助), F2(屬性方法), F8(分步執行)
途中診斷:
斷點, stop 等等。
2: 分拆
(1)語句分拆
長而難懂的句子分拆成基本單元, 利用調試功能一個個解決, 很容易就了解了它的含義。
如: intRow = Range("A"& Rows.Count).end(xlup).row
立即視窗:?Rows.Count
Range("A" &Rows.Count).Select
Range("A"&Rows.Count).End(xlup).Select
?Range("A"& Rows.Count).End(xlup).row
用眼睛都可以看到每一步Excel選中的哪個單元格, 那麼自然就不難了解了。這個小範例同時揭示了學習程式過程中一個非常重要的方面: 動手嘗試。
(2)子程式分拆
把一個冗長的程式按照功能拆分成一個個相對獨立的子程式來調用, 使得程式具有一定程度的組織性,結構性,規整性大大提高了代碼的可維護性,擴充性,
重用性。這是貫穿程式語言發展的一條主線, 因為它直接指向了程式開發的終極目的之一:開發效率。
3: 耐心
學習目的明确 ≠ 急于求成。無論學習目的如何直接和明确, 學習的過程仍然不是一蹴而就的, "捷徑"隻能是建立在紮實的階梯式基礎上。
有些新手基本代碼還沒寫利落就開始用界面寫"系統", 甚至還沒學會調試, 結果是步履維艱, 一步一問, 三步一錯, 無以為繼。還有的朋友
學習VBA是為了研究彩票, 還沒學習一星期就開始寫各種計算方法, 自然處處遇"難", 大挫學習興趣, 随之放棄。抱着明确的目的學習是好事,
不管目的是否"明智"(這是另外一個話題), 但明确的目的不等于"急功近利"。學習的程序總是遵循漸進式的規律, 跳躍式的一夜暴富隻能是空中樓閣,
VBA的優缺點是和其設計定位緊密聯系的, 是相對于其它對比對象而存在的。抛開定位在其适用範圍之外與其它開發語言比較來談VBA的"缺點", 這種比較本身就是有失偏頗的, 因為它就不是為了開發而設計的,是以也就無所謂什麼"缺點"了。
同樣, 基于設計出發點的用途和功能也就不能稱之為"優點"了,本身就是幹這個用的,又何來優點?但這些的确可以作為VBA的特點。聽起來比較混淆,就用2個單詞作為标記更容易區分些: Advantage, Feature。其實稱謂不重要,也沒必要較真分的那麼清。重要的是和定位聯系起來看待VBA的存在及其特點。
1:作為程式語言和其他開發語言比較,VBA的特點:
(1)"天然"強大的輸入輸出平台
對着"大黑框框"學程式一學就是幾年,太沒成就感了,什麼樣的控件能有Excel強大呀。
(2)使用便捷
無需搭建任何環境, IDE,調試器(debugger)齊全;
Office裝機量大,VBA到哪兒基本都可以拿出來用,就像哪部電腦都有浏覽器一樣,JavaScript随時可以用;
無需儲存,編譯,即可運作;代碼資料一體化(同時也是"缺點"),釋出簡單,無需運作環境。
與其它自動化操縱Office的方式相比, 與COM互動更加容易便捷。
(3)簡單易懂,門檻低,學習周期短
為了完整性,還是羅列出一些所謂的"缺點"
2:VBA的"缺點"
(1)不好封裝
(2)需要宿主解釋器的解析,是以速度慢
(3)安全性差
(4)無法提供面向對象的結構式程式設計方式
(5)單線程
(6)................................
概括起來基本上涉及底層,大型應用的方面根本做不到,較為複雜點的應用系統在與資料庫結合後并非不能做到,但仍不适合。
上述"缺點"基本上是腳本語言具有普遍性的"通病", 顯然VBA就不是針對完成上述功能而設計的。但相對于寄生于Office的腳本來言,
VBA是唯一的存在(VSTO不是這樣的方式),獨此一份沒有可以比較的對象,是以優點就無從談起。
希望你能找到自己的磚。我還是覺得,VBA和函數一樣,多學多練才是王道,殺貼一萬,做不了統帥,也能做大将軍了。