Warum liefert Microsoft VBA immer noch in Office-Produkten aus, anstatt .NET direkt zu integrieren? [geschlossen]

12

Ich weiß, dass es möglich ist, .NET-Code von Ihrem VBA-Code aus aufzurufen, aber warum gibt es VBA weiterhin? Der einzige Grund, an den ich denken kann, ist Vermächtnis.

Ich musste nur eine sortieren Scripting.Dictionaryund die Menge des benötigten Codes war erschreckend.

Die IDE sieht aus wie Visual Studio 2003. Und es gibt viele kleine Details, die Sie verrückt machen (wie das Ändern der Zeile und das Anzeigen einer Warnung aufgrund eines Kompilierungsfehlers). Oder, wenn Sie mehr als eine Tabelle öffnen, wird sie in Ihr "VBAProject" gemischt, und das ist wirklich verwirrend.

Die ganze Modul- / Klassenmodul- / Formularteilung ist eigentlich nicht so schlimm, aber ich habe jedes Mal die Aufgabe, Logik direkt in Formulare zu schreiben oder ein großes Modul zu haben, das sich um alles kümmert.

Warum kann ich nicht Alt + F11 drücken und in C # hacken?

Kiril
quelle
11
"Der einzige Grund, an den ich denken kann, ist Vermächtnis." Und das reicht dir nicht?
Euphoric
3
Microsoft ist der König der Legacy-Anwendungen und der Abwärtskompatibilität. Jede andere Antwort würde mich überraschen, da es sich um Microsoft handelt.
2
@Kiril Es ist höchstwahrscheinlich nicht "wir haben es immer so gemacht"; Es ist wahrscheinlich, dass wir verglichen haben, wie viel wir davon haben, die Abwärtskompatibilität zu brechen, und wie viel wir verlieren und festgestellt haben, dass es sich nicht lohnt.
Doval
1
@Kiril - Sie fragen, ob Office mit .NET "statt" VBA ausgeliefert werden soll. Dafür müsste man es aufgeben.
JeffO
3
@Kiril: Viele sehr zweifelhafte Charaktere würden sich auch sehr freuen, DLLs in Dokumente einzubetten, aber nicht zu Ihrem Vorteil.
Whatsisname

Antworten:

15

Microsoft Office bietet mehrere Möglichkeiten, um das Standardverhalten programmgesteuert zu ändern bzw. zu verbessern. VBA ist eine kampferprobte, bewährte und weit verbreitete Sprache für In-Doc-Skripte. Viele Office-Mitarbeiter kennen VBA und verwenden es, während sie keine komplexeren Programmiersprachen wie C # kennen. Office würde nicht so viel kosten, wenn Kunden viele alte makrofähige Dokumente neu schreiben müssten, die geschäftskritische Dinge erledigen - nachdem sie eine neue Sprache gelernt haben oder was auch immer. Rückwärtskompatibilität ist ein Schlüsselmerkmal!

Ein vollständiger .NET-Stack für Office erfordert wahrscheinlich eine Reihe von Abhängigkeiten (dll: s usw.) und ist für einfache Aufgaben leicht zu handhaben - für leichtgewichtige Skripte kaum eine Alternative. VSTO bietet Ihnen die Möglichkeit, mit C # zu arbeiten, jedoch zum Preis eines umfangreicheren Entwicklungszyklus für Plugins.

Ein Programmmanager bei Microsoft hat dazu hier geschrieben . Es ist klar, dass es VBA für kleine Skriptzwecke gibt und noch geben wird.

Petter Nordlander
quelle
Die Erklärung im Artikel ist sehr gut. Vielen Dank.
Kiril
6
Als ehemaliger Mitarbeiter kann ich hinzufügen, dass einige Kunden viel Geld dafür bezahlen, Gates / Ballmer / Nadella usw. als Kurzwahl sowie regelmäßige Chats verfügbar zu haben, und dass VBA als so kritisch angesehen wird, dass Änderungen, die das VBA-Verhalten stören (insbesondere in Excel) und sogar zwischen den Versionen) Aufmerksamkeit AUSSERGEWÖHNLICH schnell erhalten. Auch ist es keineswegs nur für die Ungeübten; Es wird von einer Armee professioneller Entwickler verwendet. C # wird häufig mit VBA als Arbeitswissen gesucht.
James Snell
Dieses Argument hat MS nicht davon abgehalten, VB6 vor Jahren zugunsten von VB.Net zu veralten, was viele Code-Fehler verursachte.
Mike Lowery
3

Nun, die Antwort ist nicht nur "Vermächtnis". Die Antwort ist, dass VBA weder VB6 noch VB.Net ist: Es ist VBA. Eine eigene, aber verwandte Sprache. Wenn VBA durch VB.Net ersetzt würde, würden unweigerlich viele DOKUMENTE zerstört.

Das Ersetzen von VBA durch VB.Net würde mit ziemlicher Sicherheit zu Datenverlusten für eine erhebliche Anzahl von Benutzern ihrer Hauptprodukte führen - keine gute Sache.

Und ihr Zielmarkt für VBA sind keine Programmierer.

jmoreno
quelle
7
VBA ist ein sehr enger Cousin von VB6. Die einzigen wesentlichen Unterschiede betreffen die API. dh VBForms anstelle der Excel- oder Word-Objektmodelle. Ohne diese Unterschiede können Sie VBA-Code in VB6 kopieren / einfügen (oder umgekehrt), und es funktioniert immer noch zu 99 Prozent.
Robert Harvey
3
Die Unterstützung für VBA und VB.Net/C# muss sich nicht gegenseitig ausschließen.
Joel Coehoorn
2

Wenn Sie den Hauptgrund für den Kauf von Office in der Beibehaltung der Kompatibilität mit allen vorhandenen Dokumenten sehen, von denen viele Makros und VBA enthalten, wäre es sehr mutig von Microsoft, diese Benutzer so zu behandeln, wie sie es der VB6-Menge angetan haben, und sie dazu aufzufordern Saug es auf und fang an, in .NET zu programmieren, schau dir einfach die Nr. 1 Uservoice-Anfrage an, die es je gab !

Ich kann mir vorstellen, dass die LibreOffice-Leute sich selbst bewusstlos machen würden!

VBA ist für die Produktivität in Office, nicht "Programmierung". Der Tag, an dem Sie mehr Leistung für Ihre Dokumente benötigen, ist der Tag, an dem Sie einen Programmierer einstellen, der alles neu schreibt. Ich vermute, ein weiterer Grund ist, warum Visual Studios-Makros auch nicht .NET sind. Betrachten Sie das devenv4-COM-Objekt als nicht viel anders als VBA.

gbjbaanb
quelle
Er bittet sie nicht, VBA loszuwerden. Er bittet sie, .Net als zusätzliche Option zu haben.
Joel Coehoorn
1

Ich denke, es gibt einen kleinen, aber wichtigen Unterschied zwischen Erbe und Popularität . Und wenn du so viele Verträge abgeschlossen hast wie ich, erfährst du, dass VBA wahnsinnig beliebt ist :) Ich kann dir nicht sagen, wie viele Verträge ich für "Excel-Jockeys" abgeschlossen habe, die aber nichts über Programmierung wissen kann VBA zerstören, als wäre es eine Frage von Leben oder Tod.

Unbekannter Coder
quelle