VBA源碼可以編譯嗎?
嚴格地說VBA與VB只是語法體系和解釋體系是相同的,但二者的具體實現卻是獨立的。所以,VBA代碼不能直接用VB來編譯為匯編指令的二進制。但是,VBE卻可以將VBA源碼編譯為解釋器能夠認識的PCODE。
具體可了解Microsoft Office 2000 Developer,當年微軟為了增強Office的競爭力,給廣大開發者提供了這么一套工具。隨著Office成為辦公領域的事實標準,這些機制反而被隱藏了。隨著時間的流逝,VB在專業市場的失寵,后來者很少知道有這么個東西。有可能是微軟為了營造一種類似于開源模式的生態吧,畢竟工程加密就跟耍一樣,就可以讓VBA白嫖的資源豐富起來。
PCODE曾經讓VB備受批評,主要因其低效性。但隨著解釋型語言大行其道(譬如Python),VBA的解釋器性能,反而享受了一波優越感。一來,VBA工程的代碼量都不大,處理數據的量也不大。再加之硬件性能的普遍提升,一般場景下,肉眼很難區分性能差異。二來,VBA的執行往往不趕時間,只要比起手工方式更節約時間,都是效率工具。所以,逐句解釋,逐句重復解釋,也不是個事兒。
PCODE的編譯模式,也就沒啥突出的,急迫的需求。但又的確有很多人抱怨,數據量大了的時候,循環次數多了的時候,VBA堪稱垃圾!于是很多人,情愿轉向華而不實的Python,也不愿再搭理VBA。其實,這是極端情緒化的,對于解決問題而言,無疑是變相降低了效率(新學一門現代化的編程工具,投入是巨大的)。減少源碼重復解釋的次數,規范使用VBA,就能讓VBA的性能提升N個檔次。所以,筆者提過的那些知識點,使用時稍加注意,就大功告成啦。
筆者在以往的分享中,曾經也提過VBE的PCODE編譯,但不是太主張,為什么呢?
VBA依賴桌面Office的運行環境,便捷是其頭號優點!這對于很多IT嚴格管制的公司而言,簡直就是提升自己和工作效率的福利!然而,PCODE編譯,需要鏈接器(運行鏈接器才能將解釋器的偽指令鏈接到DLL中),這個在Office里是真沒提供,需要VBA們自行拷貝1個到Office的支持目錄。
如果可以運行鏈接器(Link.exe),那為何不直接運行VB6.EXE呢?畢竟后者還可以編譯為其他編譯型語言那樣的匯編指令,這可更高效呀!更何況VBE的PCODE編譯,跟VB6里的一樣,并不能直接將Office里的任何VBA語句都能編譯成PCODE。
所以,這事就很雞肋!這大概就是微軟不再提這檔子事的原因了吧。若是仍然不信,可以到VB相關論壇上去搜索,有很多介紹的帖子。若是看不懂怎么操作的,可以留言。
更多精彩內容,盡在BtOfficer,歡迎關注!