近段時(shí)間論壇流行面向初學(xué)者的對(duì)話, 初學(xué)者通常處于懵懂狀態(tài),這種討論和探索具有很好的前瞻性指導(dǎo)意義。本貼也希望在此方面進(jìn)行一次嘗試, 主要是對(duì)散落在倫壇各個(gè)角落的問題和觀點(diǎn)進(jìn)行歸納總結(jié)發(fā)表一些自己的看法。
絮叨
苦于本人整塊空余時(shí)間非常有限無法構(gòu)架系統(tǒng)性,條理性,規(guī)整性較好的帖子,只好想到哪說到哪,更新也不能及時(shí),整個(gè)帖子拖得時(shí)間可能會(huì)很長,有時(shí)間了才能寫點(diǎn),最后太監(jiān)了也說不定。先打好預(yù)防針希望各位看官諒解,所以稱之為隨筆,但我會(huì)盡量保持內(nèi)容的獨(dú)立性和完整性。一直想寫這樣一篇帖子,但沒有時(shí)間,今天終于下筆了,呵呵。
最后聲明本貼觀點(diǎn)不一定代表正確的觀點(diǎn), 希望大家保著批評(píng),辯證的態(tài)度來看待帖子的內(nèi)容(要是把您誤導(dǎo)了,責(zé)任可就大了)由于本人水平時(shí)間有限,紕漏偏頗在所難免, 期待大家斧正。本貼內(nèi)容比較'負(fù)面', 無意引起爭(zhēng)端, 挨磚在所難免, 給初學(xué)者提供一個(gè)看問題的角度吧,希望對(duì)初學(xué)者能提供一些幫助。
(一) 根兒上的問題:學(xué)習(xí)具有目的性
初學(xué)者學(xué)習(xí)VBA之前(不僅僅是VBA, 這個(gè)話題可以推廣到Excel以及其它領(lǐng)域),最好能問問自己:
1: 【目的】為什么學(xué)習(xí)VBA或Excel, 學(xué)習(xí)VBA的出發(fā)點(diǎn)是什么?
(1)應(yīng)用性學(xué)習(xí):'出于應(yīng)用而學(xué)習(xí), 學(xué)以致用';
(2)守株性學(xué)習(xí):'技多不壓身,越多越好,學(xué)了再說,等待某天派上大用場(chǎng)';
(3)娛樂性學(xué)習(xí):'出于興趣而學(xué)習(xí), 純粹為了學(xué)習(xí)而學(xué)習(xí),學(xué)習(xí)VBA或Excel能帶來巨大愉悅';
(4)邏輯性學(xué)習(xí):'為了鍛煉自己的邏輯能力而學(xué)習(xí)Excel或VBA';
(5)獻(xiàn)身性學(xué)習(xí):'出于幫助他人而學(xué)習(xí)';
(6)虛榮性學(xué)習(xí):'出于虛榮而學(xué)習(xí), 網(wǎng)絡(luò)虛榮? 現(xiàn)實(shí)虛榮?';
(7)空白性學(xué)習(xí):'出于填補(bǔ)空白時(shí)間而學(xué)習(xí),實(shí)在是閑得沒事干了';
2: 【認(rèn)識(shí)】 把VBA或Excel作為什么看待而去學(xué)習(xí)?
(1)電子表格高級(jí)應(yīng)用工具?
(2)應(yīng)用程序開發(fā)工具?
(3)無所不能的程序語言工具?
3:【功效】 學(xué)會(huì)了以后能干什么?
(1)提高工作效率;
(2)升職加薪,增強(qiáng)職業(yè)競(jìng)爭(zhēng)力;
(3)成為職業(yè)代碼開發(fā)工人;
(4)為了(3)打基礎(chǔ);
(5)自主開發(fā)模板插件,接活掙錢;
4:【態(tài)度】 學(xué)到什么程度?
(1)使用工具: 夠用性原則;
(2)'玩'工具: '玩'轉(zhuǎn)VBA或Excel;
(3)被'工具'玩: 被VBA或Excel'玩';
5:【內(nèi)容】什么值得學(xué)習(xí)?什么不值得花時(shí)間精力去學(xué)習(xí)?
(1)對(duì)象,方法,錄制宏,Excel內(nèi)置應(yīng)用;
(2)程序語法類:循環(huán),判斷,字符串,文件操作;
(3)數(shù)組,字典;
(4)界面,系統(tǒng)等等;
(5)類模塊;
(6)vba封裝,Win32 API;
(7)算法?結(jié)構(gòu)?........略去K字;
(8)..........
6:【替代】VBA或Excel是唯一應(yīng)該花時(shí)間學(xué)習(xí)的?不花時(shí)間學(xué)習(xí)就活不了了?
沒有比較就失去了存在性....
珍惜寶貴的時(shí)間, 花時(shí)間在最值得做的事情上...
如果您是一位初學(xué)者,您抉擇好了嗎?
首先對(duì)于VBA初學(xué)者要說明的是:
論壇里不少內(nèi)容已經(jīng)大大超出了VBA應(yīng)該適用的范圍, 有'濫用'VBA之嫌, 清醒認(rèn)識(shí), 請(qǐng)勿隨波逐流, 人云亦云。
【定位】包含兩層含義:
1:Excel VBA 定位: (與頂樓的【認(rèn)識(shí)】相對(duì)應(yīng))
MS 設(shè)計(jì)VBA就是面向'終級(jí)用戶'類似于數(shù)據(jù)透視表的'office 高級(jí)應(yīng)用工具', 以腳本的形式存在(宿主就是office), 用來達(dá)到'自動(dòng)化驅(qū)動(dòng)office來完成規(guī)律性, 重復(fù)性任務(wù)'的目的。而不是提供一個(gè)'應(yīng)用程序開發(fā)工具', 最大程度可以擴(kuò)展到針對(duì)office的某些二次開發(fā)。嚴(yán)格來講VBA不是為了'開發(fā)'而是為了'應(yīng)用', 并不是說完全做不到二次開發(fā), 但和 MS 設(shè)計(jì) VBA 的本意不相符甚至是背離。更加不是"無所不能"的程序語言,有太多的事是 VBA 實(shí)現(xiàn)不了的,嚴(yán)格來說
它都不是一種程序開發(fā)語言,只能算作腳本。
(二)學(xué)習(xí)目的定位:
頂樓列舉了一些可能的學(xué)習(xí)目的,但這個(gè)屬于'主觀判斷'的范疇,不予評(píng)價(jià),只提醒兩點(diǎn)需要注意的地方:
(1)不少學(xué)習(xí)者在學(xué)習(xí)過程中目的不明確,沒有清楚地想過自己為什么而學(xué)習(xí)VBA;
(2)學(xué)習(xí)VBA的目的時(shí)常體現(xiàn)出動(dòng)態(tài)性,隨著學(xué)習(xí)的深入學(xué)習(xí)的目的已經(jīng)不知不覺地改變了。
所以初學(xué)者最好在學(xué)習(xí)之前梳理下自己的學(xué)習(xí)目的再下手不遲,并且要清醒地意識(shí)到學(xué)習(xí)的目的可能已經(jīng)改變,是否應(yīng)當(dāng)或者值得
為了這個(gè)目的深入下去。下面用一段真實(shí)的對(duì)話來說明一下:
記錄一位VBA學(xué)習(xí)者這樣的提問:
<甲>:請(qǐng)問如何學(xué)習(xí)API?
<乙>:學(xué)它干嗎用?為什么要學(xué) win32 API?
<甲>:(沉吟片刻)我看論壇很多高手都用API,覺得很酷。
<乙>:那么你知道API是干什么用的嗎?
<甲>:不知道,只知道它能讓我寫出一些VBA實(shí)現(xiàn)不了的功能。
我的想法是用API實(shí)現(xiàn)界面,VBA自帶的界面功能少,而且不漂亮。
<乙>: 那你知道那些高手學(xué)習(xí)API的目的嗎?
<甲>:不知道,高手們的用意不是我們菜鳥能猜到的,
我連他們的代碼都看不懂,很深?yuàn)W。
沒有任何笑話的意思,只是舉例說明,不少朋友學(xué)習(xí)某些知識(shí)的時(shí)候不清楚自己的目的,甚至對(duì)自己下決心要學(xué)的東西沒有基本的了解。
這位朋友不僅把VBA拔苗助長成為了基于Excel的應(yīng)用程序開發(fā)工具,甚至升華為基于winodws消息機(jī)制的應(yīng)用程序開發(fā)工具。殊不知他眼中看到的高手研究API的動(dòng)機(jī)有可能是'閑得沒事干,利用api打發(fā)空白時(shí)間'呢?如果您不是出于這樣相同的目的,也選擇學(xué)習(xí)這位高手研究的東西,那不就是南轅北轍了嗎? 再或者這些高手也是像他一樣看到他們的前輩這樣玩API, 從而出于對(duì)前輩們的敬仰, 出于對(duì)“未知的神秘",出于對(duì)“酷”的追求,這樣一直傳承下來的。很可能這些高手當(dāng)時(shí)學(xué)習(xí)的時(shí)候也不清楚學(xué)習(xí)的目的和用處。
如果讓這些高手重來一次,不知道他們會(huì)不會(huì)還是選擇研究API呢?對(duì)于花時(shí)間精力研究過API的高手們很少有人愿意承認(rèn)學(xué)API實(shí)用價(jià)值不大,誰又愿意說自己擅長的東西壞話?
盲目的崇拜,容易導(dǎo)致論壇高手研究什么初學(xué)者就跟著學(xué)什么,高手研究的初衷不一定和初學(xué)者學(xué)習(xí)的目的一致,高手的情況,境遇也 和初學(xué)者未必相同,盲從危害很大。況且作為初學(xué)者不具備分辯誰是高手的能力,只能借助論壇級(jí)別,精華貼,技術(shù)分來判斷, 相反,殊不知級(jí)別越高可能意味著誤入的歧途越深。根據(jù)自己的實(shí)際需要,考慮自己需求和知識(shí)點(diǎn)的相關(guān)性, 善用時(shí)間選擇性學(xué)習(xí)相關(guān)的知識(shí)尤為重要。
在windows環(huán)境下可以用圖形庫,linux下win32不用說也知道什么用沒有了,所以當(dāng)然談不上跨平臺(tái)。大多數(shù)職業(yè)的碼農(nóng)都不去研究它,
作為業(yè)余選手研究它除了因?yàn)椴恢涝趺椿厥拢痪褪菬o病呻吟,閑得沒事干,我想不出其他的理由。
不同的聲音:
【肯定有人會(huì)說api研究好了無比強(qiáng)大,然后列舉出來】:
問題是這種必須用api才能解決的情況有多少?花大量的時(shí)間精力去搏小概率事件就屬于偏執(zhí)。
【存在即是合理的,沒有用為什么會(huì)有win32 api?】:
api當(dāng)然有用,開發(fā)圖形庫必須用它呀,問題是您學(xué)習(xí)VBA的目的是去開發(fā)圖形庫嗎?
(三)VBA的邊緣性
說VBA不是一種程序語言吧, 不公平, 它的確提供了程序語言能完成的功能; 說它是吧, 和現(xiàn)代程序語言相比功能又很不完整。說它不是面向對(duì)象的語言吧, 它有類模塊, 提供部分類的功能; 說它是面向?qū)ο蟮陌? 類的最只要的特點(diǎn)又不具備。當(dāng)然了,這些主要都是從VB6繼承過來 的'遺傳病'。所以通常的結(jié)論:'基于對(duì)象, 但非面向?qū)ο?。MS早就停止VB6的升級(jí)了, MS對(duì)VB6的放棄直接導(dǎo)致了VBA的功能不會(huì)在本質(zhì)上變得更加強(qiáng)大, 但未嘗不是一件好事,作為使用者不用整天跟著屁股后面學(xué)習(xí)新的功能。事物發(fā)展就是這樣的,在解決了一個(gè)問題的同時(shí)又帶來另一個(gè)新問題。 在加強(qiáng)了工具功能的同時(shí)又會(huì)加重學(xué)習(xí)新功能的負(fù)擔(dān)。其實(shí)我想說明的一個(gè)道理:
'充其量內(nèi)容就這么多了, 學(xué)習(xí)VBA是可以有止境的, 差不多的時(shí)候是完全可以收手的, 就算這些內(nèi)容也完全不用全部學(xué)會(huì), 夠用就可以收手'。
作為VB6這款產(chǎn)品個(gè)人覺得滿尷尬的, 歷史的車輪帶走了它的青春,留下來的盡是滄桑。VB6曾經(jīng)擁有相當(dāng)數(shù)目的粉絲, 簡單,方便,入門快捷,使得它非常適合輕量型應(yīng)用程序, 其中界面設(shè)計(jì)便利是他的最大特點(diǎn),那個(gè)年代和其他語言配套的圖形庫不夠簡單,寫界面還是比較麻煩的。所以VB6還曾經(jīng)充當(dāng)過'門面'工具,調(diào)用其它語言填寫的內(nèi)核。這個(gè)時(shí)代完全不一樣了,很多語言的配套界面設(shè)計(jì)同樣簡單甚至更美觀, 我能想到VB6具有的唯一優(yōu)勢(shì)就是簡單易學(xué)。所以在VBA和VB6比較的問題上,個(gè)人更傾向于VBA呢,VBA更專注于和office的契合, 在這點(diǎn)上比VB更方便。而專業(yè)的應(yīng)用程序 VB6很容易被其它開發(fā)類語言替代。當(dāng)然VB6和VBA畢竟同宗,相互寫法上差異并不大, 學(xué)一下會(huì)兩個(gè)也是滿劃算的。
-> 插播一個(gè)真實(shí)的小段子:
一次和幾個(gè)初3的學(xué)生聊天, 他們告訴我最近兩個(gè)學(xué)期開了2門計(jì)算機(jī)類的課程, 一門是FrontPage寫html,另一們是VB6入門課程(練習(xí)帶界面的小程序)。
其中一名同學(xué):'聽說C++的循環(huán)比VB快100倍, 比VB牛多了!',然后我跟他們講了一番話,他們?cè)诓荒蜔┲校恍嫉谋梢曃乙幌潞?,直接不睬我了。我只好訕訕的走開了。(這幫孩子都來自于北京最好的一所中學(xué))
從上邊的小故事可以看出:
1: '硬'規(guī)則的力量
我想說,又不敢深說,怕孩子們信了我的觀點(diǎn)不好好上課,到時(shí)候拿不著學(xué)分,我不是千古罪人了,好心未必一定辦好事。
2: '明星效應(yīng)'真不是蓋的
人們更愿意相信'明星'帶給他們可以理解的'錯(cuò)誤“概念, 而不愿意接受'平民'講述給他們不太能理解的'正確'觀念。
關(guān)鍵點(diǎn):'錯(cuò)誤'的概念往往直觀,感性容易被理解和接受, '正確'觀點(diǎn)往往全面而抽象,經(jīng)常是沒有真實(shí)體會(huì)過就不能理解,自然不容易被接受。
3:懵懂的'高低貴賤, 三六九等'
程序語言的比較和選擇以及爭(zhēng)論從未停止過。左右逢源的結(jié)論從來都是最穩(wěn)妥的,雖然看起來是廢話一堆。
'程序語言沒有高低貴賤之分, 沒有最好,只有最適合,選擇什么語言取決于用來干什么?' 這是最穩(wěn)妥的但未必是完全正確的。
我沒有能力告訴你什么是完全正確的,但我可以告訴你什么理解是錯(cuò)誤的,什么是相對(duì)穩(wěn)妥的(即不會(huì)錯(cuò)的離譜)。 至今我們?nèi)詿o法找到一份完備精準(zhǔn), 比較各種語言優(yōu)略的文獻(xiàn)。理論上并非完全不可能,實(shí)踐中可不能的原因就不贅述了。
需要提醒的2點(diǎn):一是留意網(wǎng)上文獻(xiàn)的準(zhǔn)確性(搭建環(huán)境是否科學(xué)); 二是比對(duì)的是否有意義。
我追求的不是大家對(duì)觀點(diǎn)的贊同, 只是想讓更多的初學(xué)者看到,還有一點(diǎn)需要說明,帖子試圖通過身邊真實(shí)發(fā)生的小事來說明普遍性的問題,比如例子中我并不是真的要說API,我無意于討論技術(shù)細(xì)節(jié), 但好像初學(xué)者更愿意看到技術(shù)性細(xì)節(jié)的帖子,所以不喜歡我這類帖子, 我對(duì)技術(shù)非常不感興趣,所以請(qǐng)?jiān)徫覜]解釋這些細(xì)節(jié)。
(未完待續(xù))
封面圖片來自優(yōu)美圖,尊重版權(quán),從我做起。
作者:ExcelHome會(huì)員DataBus
回復(fù) 300 獲取易學(xué)寶微視頻教程詳情。
回復(fù)1至230任意數(shù)字,獲取精彩教程。
零基礎(chǔ)學(xué)VBA免費(fèi)公開課,4月15日晚8點(diǎn)準(zhǔn)時(shí)開始。
點(diǎn)擊【閱讀原文】現(xiàn)在報(bào)名。
聯(lián)系客服