最近對(duì)Excel中的VBA比較關(guān)注,一方面是因?yàn)楣居袔醉?xiàng)工作是用VBA完成的,不僅效率很高,而且業(yè)務(wù)人員的反響也特別好;另外也開始關(guān)注ExcelHome網(wǎng)站的內(nèi)容,還下載了一些大家都評(píng)價(jià)不錯(cuò)的Excel小工具來(lái)研究一下
在做這兩方面事情的過(guò)程中,我發(fā)現(xiàn),對(duì)于程序員和VBA之間,有兩種奇怪的現(xiàn)象,和大家分享一下。
首先一點(diǎn),很多人認(rèn)為VBA的程序不是真正的程序。
在大多數(shù)人的心目中,程序應(yīng)該是什么樣子的呢?要么是Application的樣子,或者說(shuō)是Winfom 的形式,要么就是網(wǎng)站的形式。也就是說(shuō)要么C/S,要么B/S,而Excel中的VBA程序,應(yīng)該算哪一種呢?似乎哪一種都不算,因此就可以得出結(jié)論,這樣的程序不是程序。
在完成工作的時(shí)候,自己倒是沒(méi)有想到這個(gè)問(wèn)題,但是,在做完了之后,部門的主管告訴我說(shuō),先這樣給業(yè)務(wù)部門用著,等有時(shí)間的時(shí)候再做個(gè)真正好用的。
其實(shí),我覺(jué)得,是否是所謂的程序并不重要,重要的應(yīng)該在于它是否滿足了業(yè)務(wù)的需要,并且具有很多所謂的真正的程序無(wú)法達(dá)到的優(yōu)點(diǎn)。
我開發(fā)的抽獎(jiǎng)的工具完全符合業(yè)務(wù)的需要,而且最近的抽獎(jiǎng)就是利用那個(gè)小工具完成的。它不僅完成了所需要的功能,還免除了業(yè)務(wù)人員導(dǎo)入、導(dǎo)出Excel數(shù)據(jù)的工作,而且產(chǎn)生的數(shù)據(jù)也可以非常方便地利用Excel特有的功能進(jìn)行各種篩選、排序等等操作。此外,對(duì)于業(yè)務(wù)人員來(lái)說(shuō),學(xué)習(xí)曲線極低,我僅僅講解了5分鐘左右,業(yè)務(wù)人員都可以完全地進(jìn)行獨(dú)立操作了。那么,在這種情況下,真的就一定需要開發(fā)出Winform形式的東西才能夠算是程序嗎?
可能之所以有些人更愿意編寫Winform或者是Web形式的程序,一方面是因?yàn)橐恢痹谀菢拥沫h(huán)境中編寫程序,對(duì)其比較熟悉,而對(duì)于VBA的環(huán)境不是很熟悉,覺(jué)得會(huì)降低工作的效率;另一方面可能是覺(jué)得,Excel這個(gè)東西,很多不是程序員的人也都能夠操作,是辦公軟件,用這樣的東西做,就顯不出自己的高明之處了,哈哈。
其次一點(diǎn),在看了很多VBA程序之后,發(fā)現(xiàn)程序中存在很多需要改進(jìn)的問(wèn)題。
非常重要的一點(diǎn)在于代碼的規(guī)范問(wèn)題,在很多非常有名的Excel工具中,也存在著嚴(yán)重的代碼規(guī)范問(wèn)題。比方說(shuō)各種命名:對(duì)于變量的命名還算不錯(cuò),而對(duì)于各種控件的命名,很多人都是采用了原有的默認(rèn)名稱,像CommandButton1、Sheet1;再比方說(shuō)對(duì)行列的操作,存在著大量的“魔法數(shù)”,例如對(duì)列“B”的操作,就是用“B”,其實(shí)對(duì)于這樣的東西,使用常量定義,可以很大程度上方便開發(fā),而且還會(huì)提高程序的可維護(hù)性。
這個(gè)問(wèn)題的原因可能在于目前大型的開發(fā)中很少會(huì)使用VBA作為開發(fā)的語(yǔ)言,而代碼規(guī)范這個(gè)東西更多的是存在于大型的項(xiàng)目開發(fā)過(guò)程中。因此,很多的VBA開發(fā)者并沒(méi)有注意到這些問(wèn)題,因?yàn)闆](méi)有人去要求。
上面的這兩個(gè)怪現(xiàn)狀是一個(gè)惡性的循環(huán),由于VBA程序中存在很多的問(wèn)題,做過(guò)大型項(xiàng)目的程序員就會(huì)對(duì)只會(huì)編寫存在大量問(wèn)題的VBA開發(fā)者嗤之以鼻,認(rèn)為他們不配做真正的程序員,從而更加不會(huì)在實(shí)際的工作中使用VBA來(lái)作為開發(fā)的工具。而大量的人認(rèn)為VBA開發(fā)者不是真正的程序員,開發(fā)VBA的程序并不意味著具有非凡的技術(shù)實(shí)力,從而使得更多的人在選擇的時(shí)候不會(huì)以VBA作為開發(fā)的工具。
針對(duì)上面的情況,我有兩個(gè)建議:一是大家要認(rèn)清VBA的好處,在某些特定的情況下,它可以大大提高開發(fā)者和業(yè)務(wù)人員的工作效率;而是作為VBA的開發(fā)者,應(yīng)該注意培養(yǎng)一下自己在代碼開發(fā)過(guò)程之中的一些素質(zhì),比方說(shuō)代碼規(guī)范,比方說(shuō)DRY原則等等。
歡迎大家對(duì)此進(jìn)行討論!