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