Dlaczego Microsoft nadal dostarcza VBA w produktach Office, zamiast bezpośrednio integrować .NET? [Zamknięte]

12

Wiem, że można wywołać kod .NET z kodu VBA, ale dlaczego VBA nadal istnieje? Jedynym powodem, dla którego mogę pomyśleć, jest dziedzictwo.

Musiałem tylko posortować Scripting.Dictionaryi potrzebna ilość kodu była przerażająca.

IDE wygląda jak Visual Studio 2003. I jest wiele drobiazgów, które doprowadzają cię do szaleństwa (jak zmiana linii i ostrzeżenie z powodu błędu kompilacji). Lub, jeśli otworzysz więcej niż jeden arkusz kalkulacyjny, wmiesza się on w ciebie „VBAProject” i to jest naprawdę mylące.

Cały podział modułu / modułu / klasy nie jest tak naprawdę zły, ale kończę za każdym razem z bezpośrednim pisaniem logiki w formularzach lub posiadaniem jednego dużego modułu, który obsługuje wszystko.

Dlaczego nie mogę nacisnąć Alt + F11 i włamać się w C #?

Kiril
źródło
11
„Jedynym powodem, dla którego mogę myśleć o dziedzictwie”. A to ci nie wystarcza?
Euforia
3
Microsoft jest królem starszych aplikacji i kompatybilności wstecznej ... każda inna odpowiedź byłaby dla mnie zaskakująca, biorąc pod uwagę, że to Microsoft, o którym mówimy.
2
@Kiril Najprawdopodobniej nie „zawsze tak robiliśmy”; prawdopodobnie „porównaliśmy, ile możemy zyskać na zerwaniu z kompatybilnością wsteczną, z tym, ile stracimy, i stwierdziliśmy, że nie jest tego warte”.
Doval
1
@Kiril - pytasz o wysyłkę pakietu Office z .NET „zamiast” VBA. To wymagałoby porzucenia go.
JeffO
3
@Kiril: wiele bardzo podejrzanych postaci chętnie osadziłoby dll w dokumentach, ale nie dla twojej korzyści.
whatsisname

Odpowiedzi:

15

Microsoft Office ma wiele sposobów na programową zmianę / poprawę domyślnego zachowania. VBA to sprawdzony w boju, sprawdzony i szeroko rozpowszechniony język skryptów w formacie doc. Wielu pracowników biurowych zna VBA i używa go, podczas gdy nie znają bardziej złożonych języków programowania, takich jak C #. Pakiet Office nie zostałby sprzedany tak często, gdyby klienci musieli przepisać mnóstwo starych dokumentów obsługujących makra, które mają kluczowe znaczenie dla biznesu - po tym, jak nauczyli się nowego języka lub cokolwiek innego. Kompatybilność wsteczna jest kluczową funkcją!

Pełny stos .NET dla pakietu Office prawdopodobnie wymaga pewnego zestawu zarządzania zależnościami (dll: s itp.) I łatwo będzie go obsługiwać w przypadku prostych zadań - nie jest to alternatywa dla lekkich skryptów. VSTO daje możliwość korzystania z C #, ale za cenę cięższego cyklu rozwoju wtyczek.

Menedżer programu w Microsoft napisał o tym tutaj . Oczywiste jest, że VBA jest i nadal będzie dostępny dla małych celów skryptowych.

Petter Nordlander
źródło
Wyjaśnienie w tym artykule jest bardzo dobre. Dzięki.
Kiril
6
Jako były pracownik mogę dodać, że niektórzy klienci płacą duże pieniądze za udostępnienie Gates / Ballmer / Nadella itp. W trybie szybkiego wybierania, a także regularnych czatów oraz że VBA jest uważany za wystarczająco krytyczny, aby wszelkie zmiany, które łamią zachowanie VBA (szczególnie w Excelu a nawet pomiędzy wersjami) WYJĄTKOWO szybko. W żadnym wypadku nie dotyczy to tylko osób niewykwalifikowanych; korzysta z niego armia profesjonalnych programistów. C # jest dość powszechnie poszukiwany w VBA jako praktyczna wiedza.
James Snell,
Ten argument nie powstrzymał stwardnienia rozsianego przed utratą VB6 lat temu na korzyść VB.Net, który złamał wiele kodu.
Mike Lowery,
3

Cóż, odpowiedź nie jest ściśle „spuścizną”. Odpowiedź jest taka, że ​​VBA nie jest ani VB6, ani VB.Net: jest to VBA. Oddzielny, ale powiązany język. Jeśli zastąpi VBA VB.Net, nieuchronnie złamie wiele DOKUMENTÓW.

Zastąpienie VBA VB.Net prawie na pewno spowodowałoby utratę danych przez znaczną liczbę użytkowników ich najlepszych produktów - nie jest to dobra rzecz.

A ich docelowym rynkiem dla VBA nie są programiści.

jmoreno
źródło
7
VBA jest bardzo bliskim kuzynem VB6. Jedyne istotne różnice dotyczą różnic związanych z interfejsem API; tj. VBForms zamiast modeli obiektów Excel lub Word. W przypadku braku tych różnic możesz skopiować / wkleić kod VBA do VB6 (lub odwrotnie), a on nadal będzie działał przez 99 procent czasu.
Robert Harvey
3
Obsługa VBA i VB.Net/C# nie musi się wykluczać.
Joel Coehoorn
2

Jeśli weźmiesz pod uwagę główny powód, dla którego ludzie kupują pakiet Office, to utrzymanie zgodności ze wszystkimi istniejącymi dokumentami, z których wiele zawiera makra i VBA, byłoby bardzo odważnym Microsoftem traktować tych użytkowników tak, jak robili to tłum VB6 i powiedzieć im, aby wciągnij go i zacznij kodować w .NET, po prostu spójrz na pierwsze żądanie faktury użytkownika !

Wyobrażam sobie, że faceci LibreOffice pogrążyliby się w nieświadomości!

VBA służy do zwiększania wydajności w pakiecie Office, a nie do „programowania”. Dzień, w którym potrzebujesz więcej mocy z dokumentów, to dzień, w którym zatrudnisz programistę, aby przepisał wszystko. Myślę, że innym powodem jest to, że makra Visual Studios nie są również .NET - pomyśl o obiekcie COM devenv4 jako niewiele różniącym się od VBA.

gbjbaanb
źródło
Nie prosi ich, by porzucili VBA. Prosi ich, aby mieli .Net jako dodatkową opcję.
Joel Coehoorn
1

Myślę, że istnieje niewielka, ale ważna różnica między dziedzictwem a popularnością . A kiedy wykonałeś tyle kontraktów, co ja, dowiadujesz się, że VBA jest niesamowicie popularny :) Nie mogę powiedzieć, ile kontraktów zrobiłem dla „dżokejów Excela”, którzy nie wiedzą nic o programowaniu, ale może zmiażdżyć VBA, jakby to była kwestia życia lub śmierci.

Nieznany koder
źródło