लोग अब भी VBA क्यों इस्तेमाल करते हैं
(sancarn.github.io)- कई संगठनों में Excel कामकाजी प्रक्रियाओं की बुनियाद बन चुका है, इसलिए जब छोटी-मोटी automation की ज़रूरत होती है तो VBA लगभग डिफ़ॉल्ट विकल्प बन जाता है
- उदाहरण वाले संगठन के पास 13 data platform और कई automation tools हैं, लेकिन जिन tools से ज़रूरी data sources तक व्यापक पहुंच मिलती है, वे लगभग VBA और PowerShell तक सिमट जाते हैं
- CyberSecurity ने
Python,Ruby,Node,Rustजैसी high-level languages की installation अस्वीकार कर दी, और विकल्प के तौर पर मौजूद Power Platform ने data accessibility और complex algorithm maintenance में सीमाएँ दिखाईं - Lotus Notes और IBM BPM के पुराने उदाहरण दिखाते हैं कि IT-नेतृत्व वाले systems support end, अधूरी migration, और maintenance gaps के प्रति कमजोर हो सकते हैं
- VBA पुराना है और इसकी कमज़ोरियाँ भी हैं, लेकिन यह Office में शामिल है, इसलिए सभी के लिए सुलभ है, और SME को business logic और data migration को सीधे verify करने का control देता है
VBA के लगातार चुने जाने के सीधे कारण
- 2021 के /r/vba survey में VBA users की बड़ी संख्या ने कहा कि वे VBA का उपयोग क्योंकि उनके पास दूसरा विकल्प नहीं था
- कई संगठन पूरी business process को Excel पर चलाते हैं, और जब थोड़ी automation चाहिए होती है तो VBA अक्सर सबसे पहले चुना जाता है
- “spreadsheet से infrastructure के कुछ हिस्सों को control करना” जैसी आलोचना के पीछे संगठन द्वारा दिए गए tools, data access, और maintenance structure की सीमाएँ होती हैं
Data access और automation tools की सीमाएँ
- उदाहरण संगठन का engineering विभाग कई automation platforms इस्तेमाल कर सकता है
- OnPrem:
PowerShell, Excel काVBA/ सीमितOfficeJS/OfficeScripts/PowerQuery,PowerBI Desktop,SAP Analysis for Office - OnCloud:
PowerApps,Power BI, non-premiumPowerAutomate - sandbox environment:
ArcGISकाArcPy,MapInfoकाMapBasic,InfoWorks ICMकाRuby,ArcGIS Online
- OnPrem:
- IT द्वारा managed data platforms
D1सेD13तक हैं, जिनमें geospatial DB, SAP DB, telemetry platform, SharePoint, Lotus Notes, IBM BPM, file system, Hydraulic Model Information आदि शामिल हैं - जिन automation platforms से ज़रूरी data sources से connect किया जा सकता है, वे लगभग VBA और PowerShell तक सीमित हो जाते हैं
Power BI Desktopसंगठन में लागू किया गया है, लेकिन यह उन सभी platforms को cover नहीं करता जिन तक VBA पहुंचता है- पहुंच का दायरा समान हो तब भी
Power BIको process automation के लिए इस्तेमाल करना कठिन है, और अलग dataset संभालने के लिए CSV बनाकर SharePoint में store करने का तरीका अपनाया जाता है - वह CSV बनाना भी कई बार VBA ही करता है
- VBA से कुछ OnCloud services से connection प्रत्यक्ष प्रयासों पर आधारित है, और SAP BW4HANA व अन्य cloud services को भी VBA से interface किया जा सकता है, ऐसा माना जाता है, लेकिन authentication requirements और protocols अभी हल नहीं हुए हैं
High-level languages और Power Platform की सीमाएँ
- संगठन business automation के लिए
Python,Ruby,Node,Rustजैसी high-level languages इस्तेमाल करना चाहता था, लेकिन team या business के स्तर पर installation के सभी अनुरोध CyberSecurity ने अस्वीकार कर दिए - अस्वीकृति का कारण यह था कि end users को high-level programming languages की पहुंच देना कंपनी की technology strategy vision के खिलाफ था
- विकल्प के रूप में बताए जाने वाले
PowerAutomate,PowerAppsज़रूरी data तक लगभग पहुंच ही नहीं पाते - data access संभव हो तब भी
Power Platformअधिकांश processes चलाने के लिए अपर्याप्त है- ज़रूरी algorithms इतने complex हैं कि
PowerAutomatesolution maintain करना कठिन हो सकता है और IT staff के लिए भी समझना मुश्किल हो सकता है - उदाहरण के तौर पर projection algorithms का उल्लेख है
- ज़रूरी algorithms इतने complex हैं कि
- अंततः व्यवहारिक रूप से बचने वाले tools
PowerShell v3और VBA हैंPowerShell v3class syntax support नहीं करता और module installation भी संभव नहीं है- VBA वह target बना जिसके लिए modern standards के हिसाब से अधिक उचित language जैसा support देने हेतु सैकड़ों घंटे लगाकर open source VBA libraries बनाई गईं
Maintenance assurance के रूप में VBA
- 2000 के दशक में कई systems IBM Lotus Notes database पर बनाए गए थे
- Lotus Notes को 2019 में HCL ने acquire किया, जिसके बाद support continuity डगमगा गई, और जून 2024 में official support end तय था
- 2019 से technical team कई systems को नई technology में migrate करने की कोशिश कर रही थी, और संगठन ने एक Lotus Notes DB को replace करने के लिए IBM Business Process Manager आधारित system विकसित करने पर भारी लागत लगाई
- योजना यह थी कि
D11मेंD10का सारा data भरने के बादD10को archive कर दिया जाएगा, लेकिन 2023 तक स्थिति अलग थी- official support end में 8 महीने बचे थे
- technical team ने IBM BPM support contract हटा दिया
- IBM BPM और Lotus Notes DB दोनों के लिए कोई replacement system दिखाई नहीं दे रहा था
- IBM BPM solution का maintenance कमजोर था और वह ज़रूरत के मुताबिक काम नहीं कर रहा था
- उद्देश्य के अनुरूप न होने वाले solution को IBM BPM में ज़बरदस्ती फिट किया गया था
- REST API है, लेकिन technical team और SME के लिए वह लगभग बेकार है
- कुछ REST calls string के रूप में encoded JavaScript का उपयोग करते हैं
- दूसरी calls में XML के अंदर JSON के अंदर HTML डालना पड़ता है
- DB tables को नाम से नहीं बल्कि GUID से query किया जाता है
- कौन-सा GUID किस table या process से मेल खाता है, इसका documentation नहीं है
D10data वास्तव मेंD11में migrate नहीं हुआ, इसलिए business एक system नहीं बल्कि 2 systems इस्तेमाल कर रहा हैD11data model भीD10data को ठीक से support नहीं करता
- SME इन tools का रोज़ उपयोग करते हैं और system changes की ज़रूरत तय करने वाले मुख्य पक्ष होते हैं
- जब SME VBA का उपयोग करते हैं, तो वे system को ज़रूरत के अनुसार सीधे control और maintain कर सकते हैं, और यह IT systems में न मिलने वाली maintenance assurance की तरह काम करता है
Control और SME collaboration की समस्या
- हाल का project business-critical spreadsheet को replace करने वाला नया integrated IT system बनाना था, और सफलता मिलने पर
D6की महत्ता C grade तक घट जानी थी - शुरुआती specification सरल थी
NodeJSserver औरMySQLdatabaseReactUI- admins और SME को codebase तथा
gitaccess देना - IT और SME मिलकर system बनाएं
- technical team ने अलग मांगें रखीं
- admins और SME code तक पहुंच नहीं पाएंगे
- frontend को “Strategic Vision” के अनुरूप
Microsoft PowerAppsमें बनाया जाएगा - backend को “Strategic Vision” के अनुरूप
Microsoft Azure Pipelinesमें बनाया जाएगा
- SME के नज़रिए से इन मांगों ने कई समस्याएँ पैदा कीं
- technical team operational work को नहीं समझती, इसलिए business logic और calculations को समझना कठिन होता है
- जब developers business logic लिखते हैं, तो errors आने की संभावना बढ़ती है
- technical team अक्सर custom technology projects को छोड़ देती है, जिससे maintenance और improvement resources गायब हो जाते हैं
- SME के साथ collaboration करने पर कम-से-कम एक team system maintenance resources बनाए रख सकती है
- SME को deliverable पर भरोसा होना चाहिए, लेकिन code दिखाई न दे तो हर edge case में उसके काम करने की पुष्टि कठिन है
- unit tests हों तब भी code न दिखे तो यह verify करना मुश्किल है कि tests मौजूद हैं और नियमित रूप से चलाए जाते हैं
- SME के पास मौजूदा legacy systems को improve और maintain करने तथा systems के बीच interactions का गहरा ज्ञान होता है
- यह verify करने के लिए कि नया system सारा data सही तरह migrate और represent करता है, backend access ज़रूरी है
- जब code VBA में रहता है, तो SME और business control बनाए रखते हैं
- technical team business team को लगभग कोई control नहीं देती, जबकि SME यह सुनिश्चित कर सकते हैं कि software modular तरीके से ठीक से विकसित हो और loosely connected technology mess न बन जाए
परिचित environment के भीतर user experience
- अधिकांश engineers रोज़मर्रा के काम में spreadsheets का उपयोग करते हैं
- VBA spreadsheet के भीतर built-in है, इसलिए यह परिचित environment में एक अपरिचित tool दे सकता है
- अपरिचित environment में अपरिचित tool देने की तुलना में, परिचित environment के भीतर नई functionality जोड़ना users के लिए अधिक शक्तिशाली हो सकता है
निष्कर्ष: VBA की कमज़ोरियाँ और व्यवहारिक चयन
- संगठन spreadsheet और VBA चुनने के पीछे कई कारण रखते हैं
- security concerns के कारण IT द्वारा दिए गए विकल्प बहुत कमजोर हैं
- alternative tools source systems से ठीक से connect नहीं होते और आमतौर पर अब भी progress में हैं
- IT strategy में ऐसी समस्याएँ हैं जो कुछ use cases को reflect नहीं करतीं
- security और maintenance concerns के कारण SME के साथ collaboration नहीं किया जाता
- users, admins, और SME को replacement systems की पर्याप्त training नहीं मिलती
- users और SME system के business logic पर कुछ स्तर का control चाहते हैं
- Office में शामिल होने के कारण यह एकमात्र व्यावहारिक technology है जिसे सभी उपयोग कर सकते हैं
- ऐसा नहीं है कि VBA में कोई कमज़ोरी नहीं है
- mataroa की पोस्ट में कुछ बातें सही हैं
- कभी-कभी management बहुत खराब होती है, लेकिन संगठन के कई लोग उपलब्ध tools के भीतर सही काम करने की कोशिश करते हैं
1 टिप्पणियां
Hacker News रायें
कंपनियों में non-inventory software की approval लेने के लिए management, upper management, project registration, budget, project manager allocation आदि से गुज़रे बिना इस्तेमाल किया जा सकने वाला development environment पहले से ही Excel के अंदर मौजूद है
अगर network data storage और web interface भी चाहिए, तो SharePoint जोड़ देना काफी है। ऐसे end-user oriented रास्ते से solutions निकलते हैं, और वे solutions VBA में बनाए जाते हैं
पहले Word VBA में बना एक भयानक report engine था, जो file share से report definitions पढ़ता था, template fragments को cut-paste करता था और फिर output देता था। IT ने एक ex-employee का PC वापस नहीं लिया था, इसलिए उसी से पूरे दिन
.docचलाकर engineering reports बनाई जाती थीं; यह CAD/CAM software का reporting option खरीदने से कहीं ज्यादा तेज़ और सस्ता था। उस option में कम-से-कम 18 महीने, consultants और project budget खर्च होना थाजब लोग Excel VBA से भयानक काम करने वालों को कोसते हैं, तो असली कारण stack में ऊपर कहीं होने की संभावना ज्यादा होती है। एक और कारण “बंदर का हथौड़ा” है: बंदर को हथौड़ा दे दो तो वह हर चीज़ ठोकता है; अगर आपके पास tool के नाम पर सिर्फ VBA है, तो हर चीज़ VBA solution जैसी दिखती है। अब हम थोड़े ज्यादा विकसित primates हो गए हैं
अगले चरण में Jim भी उसे चलाना चाहता है, तो script copy होती है; Jane अलग VBA version इस्तेमाल करती है, इसलिए उसमें बदलाव होता है; फिर “यह भी!” जुड़ता जाता है और वह फैलता जाता है। आखिर में 1500 lines का patchwork बन जाता है, और वे maintenance dev team को सौंपना चाहते हैं
कंपनी का computer बहुत locked down है, इसलिए कुछ install नहीं कर सकता और whitelist में न आने वाली sites पर भी नहीं जा सकता, लेकिन Excel मौजूद है
यह पुराने “Emacs operating system” paradigm को दूसरे context में लागू करने जैसा काफी लगता है
इसलिए यह आश्चर्य की बात नहीं कि VBA कंपनियों में अब भी बहुत valuable है। ऐसे environments में भी, जहां दूसरे tools, languages और mature build processes मौजूद थे, मैंने product managers को VBA में हैरान कर देने जितनी complex business analysis करते देखा है, और हाथ में मौजूद problem के लिए वही सही tool था
यह देखकर हैरानी हुई कि professional developers भी Excel/VBA को helper tool के तौर पर काफी इस्तेमाल करते हैं
कुछ साल पहले एक बड़े hedge fund के साथ काम करते समय एक data analyst ने अपना बनाया Excel model भेजा;
.xlsmextension देखकर लगा कि इसमें VBA code होगा। सोचा, “देखें macro-recording cowboys ने क्या किया है,” लेकिन अंदर काफी VBA था, और लेखक Caltech computer science background वाला data analyst था जो Python में बहुत अच्छा थाVBA का इस्तेमाल database से data लाकर sheet में डालने, formulas बनाने और उसे अच्छी तरह format करने के लिए था, और कुछ UserForms भी थे। मैंने उसे चिढ़ाते हुए कहा, “VBA? वहां और क्या इस्तेमाल करते हो? cotton gin और steam shovel?” लेकिन मेरी उम्मीद के उलट उसने Excel और VBA की काफी तारीफ की, जिसे सुनकर मैं हैरान रह गया
उसकी कही बात याद रह गई: “Excel calculations में छिपी dependency structure को समझना आसान बना देता है। अगर यह Python में किया होता, तो मैं पूरा दिन सवालों के जवाब दे रहा होता”
VB6 की काफी बड़ी community है, और https://twinbasic.com/ ने हाल में VBA और VB6 communities को जोड़ने में काफी मदद की है। इसलिए developer community में थोड़ी revival भी हो सकती है
Sweden में 3GB Excel/VBA pension forecasting model भी है, जिसके साथ 38-page user manual आता है। हालांकि इसे Excel के बहुत अच्छे उपयोग का उदाहरण कहना मुश्किल है: https://www.pensionsmyndigheten.se/statistik-och-rapporter/p...
VBA powerful है और prototyping व iteration तेज़ है। यहां तक कहा जा सकता है कि VB6 CRUD apps का शिखर था
“क्योंकि यह चौंकाने वाला है”
मैंने पहले सुना था कि JP Morgan के नेटवर्क पर 20,000 से ज़्यादा Access databases थे। अलग-अलग कंपनियों के data analysts को एक दिन अपना रोज़ का काम उबाऊ लगने लगा, और उन्होंने “Record Macro” बटन को देखा। कुछ लोगों को यह काफी सुविधाजनक लगा और वे इसका इस्तेमाल जारी रखने लगे। कुछ ने ज़्यादा समझदारी दिखाते हुए macro से निकले code को देखा, थोड़ा सीखा और उसे बदलने की कोशिश की
कुछ लोगों ने data structures और algorithms तक सीख लिए, Django जैसी authentication और permissions system बनाई, UserForm UI को शुरू से दोबारा बनाया, और Markdown, SAX parsing, custom scrollbar, logging, games तक implement कर दिए
जवाब शायद यह है कि data analyst अपने रोज़मर्रा के काम से ऊब गया था
बेशक यह एक जायज़ चिंता है कि किसी ऐसी चीज़ को support करना पड़ेगा जिसे हर किसी को आकर सीखना होगा। लेकिन जब तक business के पास problem solve करने वाले tools तक access है, “ऊबे हुए” लोग रास्ता ढूंढ ही लेते हैं। friction बहुत ज़्यादा है
Excel के अंदर कुछ हद तक complex चीज़ बनाकर network share पर डाल देना, IT के जरिए IDE install करवाने, कुछ बनाने, security process से गुजरकर deploy करने से आसान है, इसलिए लगता है यह जल्द खत्म नहीं होगा। हर problem को Jira project और ज़रूरत से ज़्यादा complex solution की जरूरत नहीं होती
हालांकि VBA में बड़ी चीज़ें बनाने का मैं पूरी तरह विरोधी हूँ। कुछ cell values बदलने पर एक system के cube को query करके दूसरे system के table data से जोड़ने जैसी छोटी script ठीक है, लेकिन एक point के बाद कहीं और जाना चाहिए
ज्यादातर projects के लिए, यह मानते हुए कि server license है जिससे automation किया जा सकता है, मैं Alteryx+Tableau/PowerBI stack को बहुत पसंद करता हूँ
analysts के लिए एक simple CRUD interface बनाना था
पहली problem यह थी कि analysts चाहते थे कि CRUD के सारे steps Excel के अंदर ही हों। Excel ही असली interface था, इसलिए कुछ ऐसा चाहिए था जो Excel के अंदर चल सके
IT department command-line access की अनुमति नहीं देता था, और unapproved development tools install करने से भी मना करता था। approval मिलने में महीनों लग सकते थे। database administrators मौजूदा Oracle DB में नया DB जोड़ने को लेकर उत्साहित नहीं थे, और IT department खुद DB operate करना भी पसंद नहीं करता था
यहाँ तक कि Excel में नया add-in डालने के लिए भी IT वाले से मिन्नत करनी पड़ती थी। किस्मत अच्छी हो तो किसी दिन अचानक add-in दिख जाता, लेकिन इसमें एक दिन लगेगा, एक हफ्ता लगेगा या एक महीना, पता नहीं
इसलिए practical तौर पर एकमात्र विकल्प VBA था, और आखिरकार हम analysts द्वारा दो हफ्ते में एक बार इस्तेमाल किए जाने वाले अस्थायी fixed solution को चलाने में सफल रहे
एक intelligence agency में काम करते समय अफगानिस्तान में तैनात लोगों के लिए एक app बनाना था। वे जिन computers का इस्तेमाल कर सकते थे वे सिर्फ locked-down Windows XP थे, और कुछ नया install करने का कोई तरीका नहीं था
पहले से vetted और installed Office से ही सब बंधा था, इसलिए Linux user होने के बावजूद मैं भी Office से बंध गया। pure VBA से काफी सारे Frankenstein बनाए और अच्छी सराहना मिली
scripttag में JavaScript code डाली हुई HTML file से काम चलाया। मशीन air-gapped थी, फिर भी सोचता हूँ कि क्या IE चलाना blocked था, या VBA JavaScript से ज़्यादा convenient थामानना पड़ेगा कि IT आधुनिक दौर का नौकरशाही विभाग है, जो अपनी ही बनाई समस्याओं में 95% व्यस्त रहता है और service orientation करीब 5% है। बाहरी लोगों के लिए process अपारदर्शी होता है और आम तौर पर मददगार नहीं होता
IBM BPM के विवरण में यह हिस्सा पढ़कर मैं सचमुच हँस पड़ा, क्योंकि यह समस्या के बड़े हिस्से को अच्छी तरह समेट देता है
“IBM BPM में REST API तो है, लेकिन यह REST API तकनीकी टीमों और छोटे-मझोले व्यवसायों के लिए लगभग बेकार है। कुछ REST calls string-encoded JavaScript इस्तेमाल करती हैं, और दूसरी calls XML के अंदर JSON के अंदर HTML मांगती हैं। database tables को नाम से नहीं, GUID से query किया जाता है। कौन-सा GUID किस table/process से जुड़ा है, इसका कोई documentation नहीं है”
बहुत-सी चीजें बेहूदा हद तक जटिल हो गई हैं, इसलिए IT के बाहर कोई उन्हें छूना नहीं चाहता, और कभी-कभी IT के अंदर भी नहीं। AJAX के समय से development effort का आधा हिस्सा frontend code और backend services design करने में लगने लगा, जबकि इसका end-user automation की समस्या से असल में बहुत कम लेना-देना है। उसके बाद हालात और खराब हुए, और आज के UI आधुनिक दिखते हैं, लेकिन उन्हें बनाने में इस्तेमाल हुए tech stack जितने ही user-hostile हैं
Excel में UI बस “मौजूद” होता है, macro recorder नाम का code generator भी है, और IT department मुझसे मेरे permissions के बारे में सवाल नहीं करता या यह नहीं कहता कि मेरे business problem में मदद करने के लिए उसके पास समय और budget नहीं है। इसलिए VBA users के लिए IT department को bypass करने वाला रास्ता है। यह perfect नहीं है, लेकिन बाकी alternatives से बेहतर है
कुछ भी नहीं बदला। पिछली सदी में भी ऐसा होता था और इसे automation के islands कहा जाता था। उस समय मेरे आसपास इसे अच्छी strategy माना जाता था: departments को पहले इससे खेलने दो, फिर संभावना दिखे तो integrate कर दो
कुछ analysts का मिलकर अपने लिए छोटा-सा VBA tool hack करना मुझे बिल्कुल परेशान नहीं करता। वह spirit तारीफ के काबिल है, और उसके नतीजे में शायद मैं अपने रोजमर्रा के काम को बेहतर समझ भी सकूँ
परेशानी तब होती है जब वे analysts किसी समय यह उम्मीद करने लगते हैं कि मेरी system architecture उनके personal project के हिसाब से somehow accommodate हो जाए। documentation माँगो तो नहीं है, architecture overview नहीं है, और उस monster के repository access के लिए कहो तो जवाब मिलता है, “repository क्या होता है?”
वे पूछते हैं कि उनकी spreadsheet मेरे processing pipeline में data inject क्यों नहीं कर सकती, और मानते हैं कि YouTube video आधा देखकर सीखे गए REST के टुकड़े के हिसाब से मुझे controller लिखना चाहिए। meeting में सवाल आता है, “authentication की जरूरत का क्या मतलब है? IT हमेशा चीजों को complicated क्यों बना देता है?”
चाहे VBA हो, low-code हो या कुछ और, लोगों का tools बनाना अच्छी बात है। मैं भी वही करता हूँ, बस मैं उसे shell script कहता हूँ और Git repository में रखता हूँ। लेकिन जैसे मैं अपने CLI tool को production server पर खुला नहीं छोड़ता, वैसे ही code review से गुजरे बिना किसी चीज को भी वहाँ नहीं छोड़ूँगा
मुझे market risk management के head ने hire किया था, जिसका काम यह सुनिश्चित करना था कि bank एक दिन में बहुत ज्यादा पैसा न गंवाए। उन्होंने मुझे इसलिए hire किया क्योंकि उन्हें भरोसा नहीं था कि officially approved IT department उनके algorithm implementation code को सही से लिखेगा। उदाहरण के लिए, वे एक बार इसलिए गलत हो गए थे क्योंकि वे यह operator precedence नहीं समझ पाए कि multiplication, addition से पहले होता है
market risk calculation में सभी trades को input के रूप में डालना पड़ता था, और उस समय, 2000 के दशक की शुरुआत में, मैंने desk के नीचे रखे PC पर Apache और Perl CGI install करके एक छोटा app बनाया, जिससे traders trades enter कर सकें और positions track कर सकें। traders इसे official IT solution से ज्यादा पसंद करने लगे, क्योंकि यह इस्तेमाल में आसान था और positions देखना सुविधाजनक था
कई corporate environments में IT को bypass करने का तरीका ढूँढना एक अहम capability है। Excel पर लौटें तो, traders calculations और simulations के लिए Excel इस्तेमाल करते थे, और हमने Excel में plug होने वाले tools देकर वही leverage करने की कोशिश की जो वे पहले से कर रहे थे
“end users को high-level programming language access देना company की technology strategy vision के खिलाफ है” लिखा है
“enterprise” का कमाल है। हर बार जब लोग इसे advantage या excuse की तरह पेश करते हैं, तो हैरानी होती है
क्योंकि हाल तक कोई अच्छा विकल्प नहीं था। भविष्य नए Office add-ins मॉडल में है: https://learn.microsoft.com/en-us/office/dev/add-ins/overvie...
TypeScript के बारे में जो भी कहें, कम से कम यह VBA से बेहतर है। हालांकि VBA के उलट, Excel के अंदर सीधे programming नहीं कर पाना एक बड़ी समस्या है। कभी-कभी आप reuse को ध्यान में रखकर कोई पूरा add-in project शुरू नहीं करना चाहते, बस अभी कुछ ठीक करने के लिए एक rough script एक बार चलाना चाहते हैं। इसका उपयोग करते हुए मुझे Script Lab(https://learn.microsoft.com/en-us/office/dev/add-ins/overvie...) के बारे में पता चला, शायद यह मददगार हो सकता है
ऊपर से एक साफ़ सवाल है। क्या बिना admin अधिकार वाले user IT department की दखल के बिना add-in install कर सकते हैं? क्या इसे spreadsheet में embed किया जा सकता है? अगर पहले का जवाब “नहीं” है तो यह सच में घातक है, और अगर दूसरे का जवाब भी “नहीं” है तो adoption पर बुरा असर पड़ेगा। Macros और VBA का फायदा यह है कि security settings को छोड़ दें तो हर Excel instance बिना किसी extra install के तुरंत चला सकता है
दूसरी समस्या यह है कि end users के साथ add-in share करना मामूली बात नहीं है। इसे marketplace या SharePoint पर publish करना पड़ता है, और sideloading के लिए SMB server और GPO चाहिए। हालांकि एक विकल्प है जिसका कहीं ज़्यादा ज़िक्र नहीं होता: इसे document में include कर दें, तो पहली बार खोलते समय user confirmation के बाद यह install हो सकता है
एक और बड़ी समस्या यह है कि OfficeJS इस्तेमाल करने के लिए web server host कर पाना ज़रूरी है। आम तौर पर ज़्यादातर end users के पास ऐसी access नहीं होती
VB(A), Python जैसा है। खूबसूरत नहीं है, लेकिन काम कर देता है। अगर आपको यह खूबसूरत लगता है, तो शायद अनुभव कम है और बेहतर विकल्पों की ज़्यादा जानकारी नहीं है
ऐसा tool उपयोगी होता है जिसके पास असल काम पूरा करने लायक अच्छा ecosystem हो—यानी tools, libraries और integrations। Desktop app development system के तौर पर Visual Basic, और DB के फायदे के साथ MS Access, कई स्थितियों में बहुत उपयोगी थे। जब बात उससे आगे बढ़ने लायक होती, तो शायद “real” solution तक scale करने के लिए पैसे भी होते
इसमें कोई शक नहीं कि VBA-based systems से बहुत ज़्यादा पैसा बना। Finance development ज़्यादातर outsider के रूप में करने के अनुभव से, सबसे बड़ा Excel/VBA rewrite उस कंपनी का था जिसने 2008 के आसपास credit default swaps से बड़ा पैसा कमाया था। Rewrite से पहले workbook खुलने में 5 मिनट लगते थे, लेकिन VBA बहुत सारा भारी काम कर रहा था। जिन लोगों के पास knowledge था, वे कंपनी और अपने लिए bonuses के रूप में बड़ा पैसा कमा रहे थे
इससे सीख यह है कि tool ideal है या नहीं, उससे ज़्यादा महत्वपूर्ण यह है कि वह उन लोगों के लिए accessible है या नहीं जिन्हें उस tool को इस्तेमाल करने के लिए खास तौर पर train नहीं किया गया। Python के client web browser के बाहर नंबर 1 बनने की वजह भी यही है। इसका मतलब यह नहीं कि वह सबसे अच्छा है, बल्कि यह कि वह काम कर देता है और accessible है
लेकिन उसकी popularity की यही अकेली वजह नहीं है। उसके पास सबसे मजबूत data science tools हैं, जिससे जबरदस्त असर पड़ा, और Django और Flask जैसे ठीक-ठाक web frameworks भी हैं। कई universities में Java की जगह “first learning language” बनना भी उसकी popularity बढ़ने की वजह है। VBA के साथ ऐसा नहीं है
अनुभव का मतलब यह भी जानना है कि खूबसूरत है या नहीं, इसमें subjective element होता है। VBA “कठोर” परिस्थितियों में evolve हुआ, इसलिए उसकी कुछ अजीब बातें कुछ हद तक समझ आती हैं
VBA एक ठीक-ठाक भाषा है जो object-oriented programming को support करती है। inheritance नहीं है, लेकिन composition संभव है। यह Excel तक गहराई से पहुंच और control दे सकती है, और mature व stable है। वजह यह है कि Microsoft अब इसमें बड़े बदलाव नहीं करता
“असली programmers” VBA को इसलिए नापसंद करते हैं क्योंकि आम तौर पर business users द्वारा लिखा गया amateurish spaghetti VBA code बहुत होता है, और कभी-कभी programmers से उसे debug करने के लिए कहा जाता है
इसमें अजीब विशेषताएं भरी हैं, जैसे code में control characters का localized हो जाना।[1][2] अगर आप चाहते हैं कि आपका code non-English installations पर भी चले, तो
Application.International(xlDecimalSeparator)जैसे placeholders का उपयोग करके उस function को pass की जाने वाली strings को dynamic तरीके से बनाना पड़ता है, और code की readability काफी घट जाती है। इस वजह से code टूटे तो error messages अविश्वसनीय रूप से बेकार होते हैं, और अगर developer को यह पता न हो कि यह VBA की संभावित समस्या है, तो इसे reproduce करना लगभग असंभव है। reproduce करने के लिए interface language को ऐसी भाषा में बदलना पड़ता है, जो शायद आपको आती भी न होकम-से-कम Word में, मौजूदा paragraph के बाद paragraph insert करने जैसे सबसे उपयोगी functions में से करीब आधे, table cell के आखिरी paragraph में इस्तेमाल करने पर टूट जाते हैं, इसलिए ढेर सारे spaghetti-style workarounds चाहिए होते हैं
अगर आप DOM element के
innerHtmlproperty को reference करने की तरह, कई formatting styles वाले text strings को भेजना-लाना चाहते हैं, तो hacky script-based selection और copy/paste के बिना यह आसान नहीं हैकिसी ने दूसरे thread में इसकी तुलना Bash से की थी, और मैं सच में सहमत हूं। किसी भी भाषा में इससे जटिल चीजें नहीं लिखनी चाहिए
[1] https://stackoverflow.com/questions/20652409/using-vba-to-de...
[2] https://stackoverflow.com/questions/29832281/vba-range-funct...
हालांकि यह भी सही है कि VBA को मिलने वाली नफरत का बड़ा हिस्सा VBA projects की स्थिति से भी आता है(https://sancarn.github.io/vba-articles/why-is-vba-most-dread...)
On Error Resume Nextजैसी खराब सुविधा वाले environment को संदेह की नजर से देखना मुझे उचित लगता हैExcel और पूरी spreadsheets category को देखें तो, बाहर के बहुत से लोग यह ठीक से नहीं समझते कि spreadsheet language ने reactive functional programming को कितना अच्छे से implement किया है। यही वह चीज है जिसे React/Angular 10 से ज्यादा releases तक सही करने की कोशिश करते रहे हैं
साथ ही बहुत से लोग यह नहीं समझते कि end users के लिए spreadsheets इतनी सुविधाजनक क्यों हैं, और नतीजतन वे inferior UI देते हैं जो असल में चीजों को और कठिन बना देता है
कभी-कभी एक कदम पीछे हटकर समझना चाहिए कि graphical UI न होने के दौर में भी पुराने लोगों ने चीजें सही की थीं। शुरुआती दौर में भी business चल रहा था, और अधिकतर समय कंपनियों को जिस चीज की जरूरत होती है, वह है tabular view और उस पर reactive function calculations करने का विकल्प। छोटे-मझोले business में काम करने वाले किसी दोस्त से पूछेंगे तो वह इसकी पुष्टि कर देगा