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