Unterschied zwischen Visual Basic 6.0 und VBA

208

Was ist der Unterschied zwischen den beiden. Ich dachte immer, VBA sei eine etwas "verkrüppelte" Version von VB, aber als mich neulich ein Freund fragte, hatte ich keine Ahnung, was die tatsächlichen Unterschiede sind.

Wenn Sie beispielsweise Excel verwenden, ist das VB oder VBA?

Thomas Geritzma
quelle

Antworten:

175

Für fast alle Programmierzwecke sind VBA und VB 6.0 dasselbe.

VBA kann Ihr Programm nicht in eine ausführbare Binärdatei kompilieren. Sie benötigen immer den Host (z. B. eine Word-Datei und MS Word), um Ihr Projekt zu enthalten und auszuführen. Sie können auch keine COM-DLLs mit VBA erstellen.

Abgesehen davon gibt es einen Unterschied in der IDE - die VB 6.0 IDE ist im Vergleich leistungsfähiger. Auf der anderen Seite haben Sie eine enge Integration der Host-Anwendung in VBA. Anwendungsglobale Objekte (wie "ActiveDocument") und Ereignisse sind ohne Deklaration verfügbar, sodass die anwendungsspezifische Programmierung unkompliziert ist.

Nichts hindert Sie jedoch daran, Word zu starten, die VBA-IDE zu laden und ein Problem zu lösen, das keinerlei Beziehung zu Word hat. Ich bin mir nicht sicher, ob VB 6.0 irgendetwas (technisch) kann und VBA nicht. Ich suche allerdings nach einem Vergleichsblatt auf der MSDN.

Tomalak
quelle
7
Es scheint keine prägnante Vergleichsseite auf den microsoft.com-Seiten zu geben, oder sie haben sie gut versteckt. Es genügt zu sagen, dass VB 6.0-Code in VBA unverändert ausgeführt wird, es sei denn, Sie verweisen auf COM-Objekte, die nicht mit VBA geliefert werden.
Tomalak
7
VBA und Vb6 verwenden dieselbe DLL-Datei, weshalb der Code in beiden ausgeführt wird. Es gibt jedoch so etwas wie ein Druckerobjekt in VB6, das nicht in VBA enthalten ist, und ich weiß nicht, warum das so ist. Ansonsten glaube ich, dass es keine Unterschiede in den Basissprachen gibt.
Dick Kusleika
46
Aus diesem Grund lohnt es sich hinzuzufügen, dass das Öffnen eines Office-Dokuments fast das gleiche Risiko birgt wie das Öffnen einer ausführbaren Datei.
Oorang
13
VB verfügt neben der Druckersammlung auch über die Objekte Zwischenablage, Bildschirm und App. Die Formularpakete sind völlig unterschiedlich, da Sie alles tun müssen, um Fenstersteuerelemente in VB zu vermeiden. In VBA ist es jedoch viel schwieriger, hWnd-orientierte API-Aufrufe zu verwenden, da die meisten Steuerelemente fensterlos sind. Apropos Steuerelemente: Sie können Ihre eigenen Steuerelemente in VB erstellen und in VBA sowie anderswo verwenden. Viele andere Kleinigkeiten - siehe Objektbrowser (drücken Sie F2 in der IDE).
Karl E. Peterson
3
Beachten Sie, dass dies veraltet ist. VBA wurde auf VBA 7 aktualisiert und unterstützt 64-Bit-Datentypen (LongLong, LongPtr) und weitere Änderungen. VB steckt in Version 6 fest und unterstützt diese neuen Funktionen nicht. In dieser Antwort werden weitere Änderungen erläutert. Kurz gesagt, es gibt jetzt Dinge, die VB nicht kann, aber VBA kann.
Erik A
47

VBA steht für Visual Basic für Applikationen, ebenso wie der kleine "für Anwendungen" -Skriptbruder von VB. VBA ist zwar in Excel verfügbar, aber auch in anderen Office-Anwendungen.

Mit VB kann eine eigenständige Windows-Anwendung erstellt werden, die mit VBA nicht möglich ist.

Entwickler können VBA jedoch als Skriptsprache zur Automatisierung dieser Anwendungen in ihre eigenen Anwendungen "einbetten".

Bearbeiten : Aus den VBA-FAQ :

F. Was ist Visual Basic für Anwendungen?

A. Microsoft Visual Basic für Applikationen (VBA) ist eine einbettbare Programmierumgebung, mit der Entwickler benutzerdefinierte Lösungen mit der vollen Leistung von Microsoft Visual Basic erstellen können. Entwickler, die Anwendungen verwenden, die VBA hosten, können die Anwendungsfunktionalität automatisieren und erweitern und so den Entwicklungszyklus von benutzerdefinierten Geschäftslösungen verkürzen.

Beachten Sie, dass VB.NET sogar eine andere Sprache ist, die nur die Syntax mit VB teilt.

fretje
quelle
9
Tatsächlich bezeichnet Microsoft VB.Net als "Visual Basic". Siehe msdn.microsoft.com/en-us/vbasic/default.aspx .
DOK
19
Ja. Das ist eine Tatsache, die mich dazu bringt, mir jedes Mal die Haare auszureißen, wenn ich über Google nach VB- oder VBA-spezifischer Hilfe suche. Dumme Marketingentscheidung.
Tomalak
8
@Tomalak: Deshalb habe ich einfach gemerkt , dass ;-)
fretje
2
@DOK: Ja, aber das ändert nichts an der Tatsache, dass VB.NET eine andere Sprache ist als das visuelle Basic, das "wir Entwickler" als VB6 oder früher kennen.
Fretje
4
@j_random_hacker In diesem Fall fühlt es sich fast so an, als würde MS VB.Net behandeln, eine Variante von VB, zumindest basierend auf der Visual Studio VB-Seite - was nicht genau wäre. Seltsamerweise enthält dieser Wiki-Artikel mehr Informationen als die MS Visual Studio-Seite :) en.wikipedia.org/wiki/Visual_Basic_.NET . Eine Frage im MSDN-Forum scheint jedoch
JackOrangeLantern
41

Hier ist eine technischere und gründlichere Antwort auf eine alte Frage: Visual Basic für Applikationen (VBA) und Visual Basic (pre-.NET) sind nicht nur ähnliche Sprachen, sondern dieselbe Sprache. Speziell:

  • Sie haben die gleiche Spezifikation : Die implementierungsunabhängige Beschreibung dessen, was die Sprache enthält und was sie bedeutet. Sie können es hier lesen: [MS-VBAL]: VBA-Sprachspezifikation
  • Sie haben dieselbe Plattform : Beide kompilieren zu Microsoft P-Code , der wiederum von genau derselben virtuellen Maschine ausgeführt wird, die in der DLL msvbvm [x.0] .dll implementiert ist.

In einem alten VB-Nachschlagewerk, auf das ich letztes Jahr gestoßen bin , hat der Autor (Paul Lomax) sogar behauptet, dass "VBA" immer der Name der Sprache selbst war, sei es in eigenständigen Anwendungen oder in eingebetteten Kontexten (wie MS Office) ):

"Bevor wir weiter gehen, wollen wir nur einen grundlegenden Punkt erläutern. Visual Basic für Applikationen (VBA) ist die Sprache, die zum Programmieren in Visual Basic (VB) verwendet wird. VB selbst ist eine Entwicklungsumgebung; das Sprachelement dieser Umgebung ist VBA. ""

Die kleinen Unterschiede

Gehostet oder eigenständig : In der Praxis bedeuten die meisten Leute, wenn sie "VBA" sagen, speziell "VBA, wenn sie in MS Office verwendet werden", und "VB6" bedeutet "VBA, das in der letzten Version des eigenständigen VBA verwendet wird" Compiler (dh Visual Studio 6) ". Die mit MS Office gelieferte IDE und der Compiler sind fast identisch mit Visual Studio 6, mit der Einschränkung, dass die Kompilierung nicht für eigenständige DLL- oder Exe-Dateien zulässig ist. Dies bedeutet wiederum, dass in eingebetteten VBA-Projekten definierte Klassen von nicht eingebetteten COM-Verbrauchern nicht zugänglich sind, da sie nicht registriert werden können.

Weiterentwicklung : Microsoft stellte die Produktion eines eigenständigen VBA-Compilers mit Visual Studio 6 ein, da auf die .NET-Laufzeit als Plattform der Wahl umgestellt wurde. Das MS Office-Team verwaltet jedoch weiterhin VBA und hat sogar eine neue Version (VBA7) mit einer neuen VM (jetzt nur noch VBA7.dll genannt) veröffentlicht, die mit MS Office 2010 beginnt. Der einzige große Unterschied besteht darin, dass VBA7 beide 32- hat. und 64-Bit-Version und hat einige Verbesserungen, um die Unterschiede zwischen den beiden zu behandeln, insbesondere in Bezug auf externe API-Aufrufe.

Joshua Honig
quelle
2
Ich erinnere mich an dasselbe Zitat in Lomax 'Buch, aber angesichts aller anderen gegenteiligen Aussagen in diesem Forum, auf Wikipedia usw. frage ich mich, wer Recht hat und warum es Meinungsverschiedenheiten gibt! Lomax schrieb auch (S. 3): "VBA ist dieselbe Sprache, unabhängig davon, ob Sie damit eine VB-Anwendung erstellen oder eine Aufgabe in Word oder Excel automatisieren." "VBA ist eine gehostete Sprache und Teil der VB-Familie von Entwicklungstools."
EJ Mak
1
Wenn Sie in VB6 Hilfe wählen, gehen Sie zur VBA-Sprachreferenz. VB6 hostet wie Word die VBA-Sprache. Als Anwendungsobjekte gelten globale Objekte (Automatisierungsstandard). VB6 bietet ein App-Objekt, das für eigenständige Programme geeignet ist. Word bietet ein App-Objekt für Word-Makros. Beachten Sie, dass die Sprache identisch ist. Alle Verweise auf fehlende Elemente beziehen sich auf gehostete Objekte wie das VB6-Druckerobjekt - es ist nicht Teil der Sprache, sondern des Hosts.
ACatInLove
15

Möchten Sie VBA mit VB-Classic (VB6 ..) oder VB.NET vergleichen?

VBA (Visual Basic für Applikationen) ist eine vb-classic-basierte Skriptsprache, die in Microsoft Office-Anwendungen eingebettet ist. Ich denke, die Sprachfunktionen ähneln denen von VB5 (es fehlen nur einige wenige integrierte Funktionen), aber:

Sie haben Zugriff auf das Office-Dokument, für das Sie das VBA-Skript geschrieben haben, und können z

  • Schreiben Sie Makros (= automatisierte Routinen für kleine wiederkehrende Aufgaben in Ihrer Büroarbeit)
  • Definieren Sie neue Funktionen für die Excel-Zellformel
  • Bürodaten verarbeiten

Beispiel: Stellen Sie den Wert einer Excel-Zelle ein

ActiveSheet.Cells("A1").Value = "Foo"

VBC und -.NET sind keine Skriptsprachen. Sie verwenden sie, um eigenständige Anwendungen mit separaten IDEs zu schreiben, die Sie mit VBA nicht ausführen können (VBA-Skripte "existieren" nur in Office).

VBA hat nichts mit VB.NET zu tun (sie haben nur eine ähnliche Syntax).

Dario
quelle
11

Tatsächlich kann VBA zum Kompilieren von DLLs verwendet werden. Die Office 2000- und Office XP Developer-Editionen enthielten einen VBA-Editor, mit dem DLLs zur Verwendung als COM-Add-Ins erstellt werden konnten.

Diese Funktionalität wurde in späteren Versionen (2003 und 2007) mit dem Aufkommen der VSTO-Software (VS Tools for Office) entfernt, obwohl Sie ohne die Verwendung von VSTO (oder VS.Net) von offensichtlich immer noch COM-Add-Ins auf ähnliche Weise erstellen können mit VB6 IDE.

Überspringen Sie R.
quelle
10
Diese Funktionalität wurde nicht entfernt. Microsoft hat "Office XP Developer" nur nicht aktualisiert, um spätere Versionen zu unterstützen. Sie können den Entwickler weiterhin installieren und es funktioniert ohne Probleme. Es wird von Microsoft einfach nicht unterstützt. Dies liegt daran, dass VBA, das mit 2003/2007 ausgeliefert wird, immer noch dieselbe VBA-Version wie XP / 2002 ist.
AMissico
6

Es ist VBA. VBA bedeutet Visual Basic für Applikationen und wird für Makros in Office-Dokumenten verwendet. Es hat keinen Zugriff auf VB.NET-Funktionen, daher ähnelt es eher einer modifizierten Version von VB6 mit Add-Ons, mit denen das Dokument bearbeitet werden kann (wie Arbeitsblatt in VBA für Excel).

Instanz von mir
quelle
7
Nein, VBA ist keine modifizierte Version von VB5 / 6, sondern eine Teilmenge. Werfen Sie einen Blick auf den Objektbrowser in der VB5 / 6-IDE, und Sie sehen dort die vollständige VBA-Objektbibliothek, die Sie verwenden und missbrauchen können. Allerdings verfügt VBA (normalerweise, aber nicht unbedingt) über zusätzliche Objektbibliotheken, die standardmäßig geladen werden und standardmäßig globale Objekte bereitstellen, die sich auf die Host-Umgebung beziehen.
Karl E. Peterson
5

VB ist keine Sprache . VB ist ein Programm, das VBA hostet, genau wie Office VBA hostet. VB ist eine Reihe von App-Objekten, genau wie Word und Excel, und ein Formularpaket, genau wie in Office.

Sie können also nur VBA-Code in VB schreiben.

PS: Diese Informationen befinden sich auf der Registerkarte INFO auf der VB- Fragenseite für VB.

Aus VBA Info

VBA 6 wurde 1998 ausgeliefert und umfasst eine Vielzahl lizenzierter Hosts, darunter Office 2000 - 2010, AutoCAD, PI Processbook und das eigenständige Visual Basic 6.0

Gelassenheit
quelle
3
Diese Antwort ist einfach falsch. VBA ist nicht VB6. Dies sind unterschiedliche Entitäten, die viele Funktionen gemeinsam haben. Dieses kurze Zitat beweist nichts. Zu sagen, dass es keine Sprache ist, weil es auf einem Host ausgeführt wird, verurteilt auch Sprachen wie JavaScript zu Nicht-Sprachen, was einfach nicht wahr ist. Außerdem können VB6-Programme zu eigenständigen Programmen kompiliert werden, sodass für sie kein Host erforderlich ist (außer für Windows).
Erik A
@ErikA Nein, du hast falsch verstanden, was sie sagen. VB wie in VB6 ist die Host-Anwendung, auf der VBA ausgeführt wird, genau wie bei Office-Anwendungen. VB6 ist zufällig eine Anwendung, mit der Sie Binärdateien freigeben können, um eigenständige Dateien zu erstellen. Es gibt andere Antworten oben, die die Details erklären.
typedef Miles_Williams MILO
4

VBA steht für Visual Basic For Applications und ist eine Visual Basic-Implementierung, die in der Office Suite verwendet werden soll.

Der Unterschied besteht darin, dass VBA in Office-Dokumente eingebettet ist (eine Office-Funktion). VB ist die Idee / Sprache für die Entwicklung von Anwendungen.

Sieger
quelle
1

VB (nur Visual Basic bis 6.0) ist eine Obermenge von VBA (Visual Basic für Applikationen). Ich weiß, dass andere sich dem entzogen haben, aber ich verstehe, dass die Semantik (dh das Vokabular) von VBA in VB6 enthalten ist (mit Ausnahme von Objekten, die für Office-Produkte spezifisch sind). Daher ist VBA eine Teilmenge von VB6. Die Syntax (dh die Reihenfolge, in der die Wörter geschrieben werden) ist in VBA genau dieselbe wie in VB6, aber der Unterschied besteht darin, dass die für VBA oder VB6 verfügbaren Objekte unterschiedlich sind, weil sie unterschiedliche Zwecke haben. Der Zweck von VBA besteht insbesondere darin, Aufgaben, die in MS Office ausgeführt werden können, programmgesteuert zu automatisieren, während der Zweck von VB6 darin besteht, Standard-EXE-, ActiveX-Steuerelemente, ActiveX-DLLs und ActiveX-EXE-Dateien zu erstellen, die entweder eigenständig oder in anderen Programmen wie MS Office oder Windows ausgeführt werden können.

user65795
quelle
VB6 hostet die VBA-Sprache. Es ist identisch. VB6 stellt als Host bestimmte Objekte bereit, wie dies Word beim Hosting tut.
ACatInLove