說起VBA,很多接觸過Excel的人會一臉茫然,但一說到宏就明白了。其實,宏與VBA從本質上是一回事,都是一組代碼,只不過宏是我們運用Excel直接錄制的操作步驟集合,以解決反復重復的操作帶來的效率低下;而VBA是運用編寫代碼的形式完成宏不可能完成的自動處理任務,它可以應用到任何工作表或工作薄。
下面給VBA下個定義:VBA(Visual Basic For Application)是一種通用的自動化語言,是非常流行的應用程序開發(fā)語言Visual Basic的子集。VBA作為一種標準宏語言,具有跨越多種應用軟件并且具有控制應用軟件對象的能力,在Office中,VBA適用于所有應用程序,包括Word、Excel、PowerPoint、Access、Outlook以及Project。多種應用程序共用一種語言,節(jié)省了程序人員的學習時間,提高了不同應用軟件間的相互開發(fā)和調用能力。所以,VBA不僅僅是針對Excel,對整個Office都能起到提升效率的編程工具。
以VBA最常見的應用領域Excel來說,我們運用它可以將重復的操作一鍵化,將復雜的計算簡單化,可以根據(jù)實際需求自定義函數(shù),快速訪問、導入和導出外部數(shù)據(jù),制作復雜、規(guī)范化的圖表、數(shù)據(jù)模型,自動生成報告等。例如某大型寫字樓對租戶進行滿意度調查,調查表用Excel形式且調查的項目較多,收回調查表多達幾百份,再對工作薄中的數(shù)據(jù)進行,工作量巨大,需要兩個人兩天的時間,如果運用VBA編寫的程序進行匯總,一個人幾分鐘即可,大大提高了工作效率。再比如,某大型金融機構的汽車信貸業(yè)務,需要對不同廠商、不同型號、不同時期、不同的城市銷售汽車的貼息、貸款金額進行分類統(tǒng)計,并分別送達給各自的上游廠商。在收集不同品牌、不同城市的銷售商數(shù)據(jù)時,由于品牌、型號的輸入不規(guī)范、不統(tǒng)一,無法進行數(shù)據(jù)統(tǒng)計,而參照正確的品牌名稱、型號對這些上萬條數(shù)據(jù)進行整理就成了很大的問題,運用VBA快速整合,就成了簡單、快速、低成本、高效率的解決方案。
以上是我們所講的VBA優(yōu)勢所在,然而實現(xiàn)這一切,都是緊緊圍繞著VBA程序代碼的寄生平臺Office應用軟件,即針對Excel編寫的代碼,其程序的運行、對話框和窗體的打開、執(zhí)行都需要先打開excel再進行處理,離開它VBA程序就成了無水的根。這就是VBA的局限性,因為它不是一個獨立的執(zhí)行語言平臺。所以,希望運用VBA制作一個漂亮的啟動界面(在不打開Excel的情況下),并擁有豐富的支持組件恐怕很難。
VBA的加密和權限設置是它的另一大缺陷,現(xiàn)在網(wǎng)上有很多Office和VBA原代碼密碼的破解工具,從去除密碼到修改密碼都有。
最可怕的是,Excel本身就是一個占用資源很大的程序,在應用代碼對它進行操作時,如果表格本身數(shù)據(jù)量和修飾、公式很大時,速度自然而然很慢,影響數(shù)據(jù)處理的效率。
很多公司、個人希望將自己用VBA編寫的程序、模型、甚至系統(tǒng)進行商業(yè)化,以取得一定的經濟利益,而上述缺陷會給商業(yè)化的進程帶來重重的困難。所以,現(xiàn)提供的兩點建議:一是將VBA程序封裝為DLL文件或可執(zhí)行的EXE文件,但代碼需要調整,且VBA窗體受程序模塊本身的限制在封裝過程中處理很麻煩。二是徹底放棄VBA,運用其他高級語言(像VSTO、C#等)對Excel直接操作,其搭建的交互式界面會和加密試、權限設置會非常專業(yè)。
因此,應正確認識VBA的功能以及它對Office的依賴性,才能將我們日常工作帶來便利。