VBA在語法層面上是不是很落後?為什麼?

end if ,end sub等奇怪而啰嗦的關鍵字比起{}的設計顯得太業餘了,不具有完整的面向對象特徵,讓寫稍微大點的工程就很難。作為一個類C語言程序猿看著這語法無比糾結,感覺js的語法都比VBA先進很多。請問語法設計者這樣設計有何道理?


Basic 語法的設計目的:

對 Basic 的誤解

Kurtz 絲毫沒有希望 Basic 成為計算機技術人員的入門語言,他的願望是希望給文科學生提供一個接觸計算機技術的機會。這些文科學生將來並不會從事計算機技術和科學的研究,但是他們更可能在社會生活中作出高層決定。如果他們完全不了解計算機技術,那麼他們在一個計算機技術主導的社會中作出的決定是否明智就很成問題。也就是說,發明 Basic 語言的本意是社會層面的,是一次對大眾和潛在的高層管理人員的公關行為。(相對來說,在中國推廣 Basic 語言的行為有一種誤導的傾向。Visual Basic 這種嘗試也是對其本意的一種偏離。)從這個意義上說,不但 Basic 語言的結果是成功的,能夠提出這個設想本身就說明美國的知識階層是有遠見的。


end 比花括弧好一萬倍!(逃


覺得不爽趕緊再造門新語言 &>_&>


不落後,相反因為有office平台做後盾,比他原始的basic語言還要有生命力,意味著只要安裝了office就等於有了vba的編程環境和編譯器,這可不僅限於程序員,對於所有拿office辦公的人員都是如此,你看都已經office 2016了 vb6早就完蛋了,vba卻一直存在,我覺得微軟是考慮市場根植的深度想干而幹不了它。


這鍋不是 VBA 的鍋,而是 Office 的宏編輯器的鍋,那個自動補全,好像還停留在 vb 6.0 時代,我用的還是 Office 2016,就比記事本稍微強點。

與之語法類似的 http://VB.NET 關鍵詞再長我都不嫌長,MustInherit,MustOverride,RemoveHandler 在強大的 VS 下都不值一提。end if,end sub,end function 也是敲一個回車 IDE 給你自動補出來了。

C 語言:

你輸入 if (a == 1){ 回車,IDE 給你補個 },你就高興的不要不要。

http://VB.NET 呢?

你輸入 If a = 1 回車,VS 給你補個 Then 還帶一個 End If,比 C 語言還少輸入了 4 個字元,同學,要啥自行車啊?

Office呢?

你輸入 If a = 1 回車,我記得不太清,好像會 duang 的彈出一個模態對話框,告訴你語法錯誤,你要自己寫個 Then 才能回車。好好好,我造 Basic 你有高貴的即時編譯,但是你嫩不嫩低調點弄個下劃線提示我?你費勁巴拉寫個 Then 回車後,好像這個 End If 還得自己寫,要不又 duang duang duang……

這是 VBA 的鍋嗎?


就我所知吧,vba有如下缺點,如若改進,則依舊是可以拼一把的利器。

1.編輯器。這個OfficeVBE編輯器已經嵌(qin)入各大辦公軟體里了。

1.1 寫了個參數,我不知道全局這個參數都在那出現過,只能找到一個定義位置。

1.2 不支持自動補全關鍵詞。

1.3 快捷鍵太少。注釋一下都要用滑鼠點注釋按鈕。

1.4 界面配置繁瑣,沒有一個通用好看的界面。白底色,一天14小時,眼睛不想要了?

2.語法

2.1不支持json數據格式。定義一個x={a:10;b:{b1:20,b2:30}}就可以通過x.b.b2取值的方法簡直強大到爆。

2.2 不支持函數作為參數。call x(a,b),其中b是一個函數。

2.3 有了python的縮進,但沒有python的簡潔。雖然都需要買個遊標卡尺。

2.4 類里出錯,能不能別TM定位到調用函數那?

3. 全局

3.1 單線程。一個計時器都要佔用那麼大的CPU。要是多線程該多好,不就多個回調嗎,但也不至於程序運行個計時器就卡的要死。

3.2 多文件共享1個內存。excel只有通過特殊的簡易方法才能新開闢一個內存空間保證同時運行兩個VBA。

3.3 不獨立。不獨立的話誰還以你為中心。應該讓VBA為主,Excel為輔。此時Excel當做高級CONSOLE也很不錯。如若如此,VBA將是可以取代很多程序的利器(取名為VBC visual basic for computing)

3.4 不能直接編譯,非得解釋。速度一下子拉下來了。其實可以做一個編譯功能出來,每次代碼都轉化為exe,編輯就編輯macro那一部分多好。

3.5 運行就等於死機!!!!鬼知道運行到哪了。

2016年10月23日未完待續

但是VBA作為快速編輯實現器是非常有效的一個手段,刷數據,運算,輸出txt文件等等非常便捷,蛋疼怎麼辦呢,excel電子表格作為結果展示還非常方便,運算過程一目了然,好工具不能丟,總不可能花太多時間用其他語言開發一個,於是我在我的Nodejs後台就做了這麼一個操作:

1.excel設置成自動運行宏。

2.在某個階段,用nodejs調用此xlsm文件,其中xlsm運行某個程序,程序運行結束會將時間輸出到a.txt文件中。nodejs後台就在此時一直等待a.txt的輸出值大於某個時間為真,則判斷外調excel執行完畢,繼續獲取excel執行的結果。

3.由於excel默認只能一次打開一個,所以可以將excel排列成隊列,由nodejs後台寫一個過程協調1個excel結束下一個excel開始。

2016年10月24日未完待續

Mark Andersen 提到了VSTO,我沒學過這個刀奶環境,不知道vsto是不是還是微軟的乾兒子,不知道企業主為什麼vba能實現的非得java實現,但是This is in China, impossible is nothing.

VSTO所有招聘:

這麼多崗位等著挑呢。。


為什麼要吐槽VBA?它現在已經是財務人員的語言了,和你們程序猿早就恩斷義絕了


是的,python比較先進,不需要end if或者next i之類的,甚至大括弧都沒有,就是要買遊標卡尺而已(逃


沒什麼道理,Basic語言設計之初就是要用文字來代替符號的,只是一不小心流行起來了。

Basic == 初學者通用符號指令代碼


不是所有的語言都是c風格的。pascal/delphi就是很多begin/end,ruby也是很多end,沒啥奇怪的。


誰讓你非得用 VBA 宏了呢,那是給哪個年代設計的?新版 Office 還帶這個特性我的理解應該只是為了向後兼容,你看它那個編輯器還基本繼承的 VB 6.0 的樣子就應該明白現在只是維護不更新了吧。

想要正經開發去用 Visual Studio + Office Developer Tools 做大工程啊!

要想爽去用 VSTO,支持 http://VB.net 與 C#。http://VB.net 我不熟悉,但印象中對面向對象基本有相對完整的支持了,語法層面還是 BASIC 那一套沒法說;然後 C# 是基本徹底支持面向對象了吧。然後這一套 Interop 的東西基本繼承了 VBA 那一套 API 的。BASIC 的語法層面的問題其他幾位說的挺好了,不贅述。

或者去用做 Web Add-in 啊,用 Javascript 啊,不過這一套 API 我沒完全沒搞清楚暫時不評價;但你看最近幾屆 Build 大會宣傳的不都是這個么,不是 VBA 了啊。

而且這一套還可以隨便用其他的 .net 的東西。

而且最關鍵的這些有 Visual Studio 這個編輯器最新版加持比 VB 6.0 那一套東西爽到不知道哪裡了。

當然這裡面微軟也不是完全沒鍋,這一套東西的文檔至少在我看來是比較亂的,然後好像也沒有做過太多宣傳(誤?)。

但題主不去試試各種東西看看非得折騰 VBA 怪誰?


就像某答主說的,VBA現在不是主流的網站或企業構架語言,而是銀行中後台的通用語言。涉及到的組有Decision Management, Product Solution, Operation Technology等等。通常銀行中後台把客戶數據抓下來後,使用Excel來篩選和重組需要的數據,以作決策使用。這個過程中VBA會讓處理過程事半功倍。比如down下來幾百萬條客戶記錄,做data washing,篩選,計算(Aggregation)以拿到需要的數據,然後根據這個來推出新產品或優惠。銀行里的人大部分不是程序員專業出身,需要快捷簡單好用的工具來完成任務,預裝的Excel便成了當仁不讓的選擇。而與Excel捆綁的VBA就成了銀行熱門語言—清晰易懂,快速上手,功能強大。所以任何存活的語言都有其背景和受眾。另外,語言的語法只是表象,關鍵還是所有語言背後的普適方法和思維。


哪裡看到落後了?

不用end if end sub用{}就先進了?

不用dim as string用string就先進了?

不用thisdocumnet用application.microsoft.word.introp.document就先進了?


用慣.ToString()的人當然用不慣CStr()

哎~只能說習慣就好~


http://VB.Net,其實就是.Net Framework的一層外殼包裝。所以,http://VB.Net與C#語法上等價的,你能用C#乾的事,幾乎都可以很簡單地一一轉換為http://VB.Net描述


vba是讓你對付你office文檔或者文本文檔中的少量數據,解決重複性操作的輕型工具,又不是讓你拿來開發同時幾千並發的伺服器端軟體的。

那麼真的需要支持那麼豐富的oo、多線程之類的特性嗎?夠用就好。


很多用java來寫非常複雜的功能,用vba分分鐘搞定

編程語言也是一個工具,每個工具都有它的優缺點


也許是設計者覺得,用戶更容易識別吧。其實我也不大喜歡這種結構,但是微軟公司,沒有打算再去更改這東西了。你就認了吧。


SAP的開發語言ABAP也是IF.... ENDIF 這樣


解決的


推薦閱讀:

作為軟粉你最看不慣哪些針對微軟產品的無腦黑?

TAG:編程語言 | MicrosoftOffice | VBA |