Différence entre Visual Basic 6.0 et VBA

208

Quelle est la différence entre les deux. J'ai toujours pensé que VBA est une version quelque peu «paralysée» de VB, mais quand un ami m'a demandé l'autre jour, je n'avais aucune idée des différences réelles.

De plus, lorsque vous utilisez, par exemple, Excel, est-ce VB ou VBA?

Thomas Geritzma
la source

Réponses:

175

Pour presque toutes les fins de programmation, VBA et VB 6.0 sont la même chose.

VBA ne peut pas compiler votre programme dans un binaire exécutable. Vous aurez toujours besoin de l'hôte (un fichier Word et MS Word, par exemple) pour contenir et exécuter votre projet. Vous ne pourrez pas non plus créer de DLL COM avec VBA.

En dehors de cela, il y a une différence dans l'IDE - l'IDE VB 6.0 est plus puissant en comparaison. D'un autre côté, vous avez une intégration étroite de l'application hôte dans VBA. Les objets d'application globale (comme "ActiveDocument") et les événements sont disponibles sans déclaration, la programmation spécifique à l'application est donc simple.

Pourtant, rien ne vous empêche de lancer Word, de charger l'IDE VBA et de résoudre un problème qui n'a aucun rapport avec Word. Je ne sais pas s'il y a quelque chose que VB 6.0 peut faire (techniquement), et VBA ne peut pas. Je cherche cependant une feuille de comparaison sur le MSDN.

Tomalak
la source
7
Il ne semble pas y avoir de page de comparaison concise sur les pages microsoft.com, ou ils les ont bien cachés. Il suffit de dire que le code VB 6.0 s'exécute sans modification dans VBA, sauf si vous faites des références à des objets COM qui ne sont pas fournis avec VBA, bien sûr.
Tomalak
7
VBA et Vb6 utilisent le même fichier dll, c'est pourquoi le code s'exécute dans l'un ou l'autre. Cependant, il y a quelque chose comme un objet Printer dans VB6 qui n'est pas dans VBA et je ne sais pas pourquoi. Sinon, je crois qu'il n'y a pas de différences dans les langues de base.
Dick Kusleika
46
C'est pourquoi je pense qu'il vaut la peine d'ajouter que l'ouverture d'un document Office comporte presque le même risque que l'ouverture d'un exécutable.
Oorang
13
VB possède également les objets Clipboard, Screen et App, en plus de la collection Printers. Les packages de formulaires sont complètement différents, car vous devez faire tout votre possible pour éviter les contrôles fenêtrés dans VB, mais dans VBA, il est beaucoup plus difficile d'utiliser les appels d'API orientés hWnd car la plupart des contrôles sont sans fenêtre. Et, en parlant de contrôles, vous pouvez créer les vôtres dans VB et les utiliser dans VBA ainsi qu'ailleurs. Beaucoup d'autres inconvénients - voir l'Explorateur d'objets (appuyez sur F2 dans l'IDE).
Karl E. Peterson
3
Notez que cela est obsolète. VBA a été mis à jour vers VBA 7, avec la prise en charge des types de données 64 bits (LongLong, LongPtr) et d'autres modifications. VB est bloqué sur la version 6, il ne prend donc pas en charge ces nouvelles fonctionnalités. Cette réponse traite de plus de changements. En bref, il y a maintenant des choses que VB ne peut pas faire, mais VBA le peut.
Erik A
47

VBA signifie Visual Basic pour Applications , tout comme le petit frère de script "pour les applications" de VB. VBA est en effet disponible dans Excel, mais aussi dans les autres applications bureautiques.

Avec VB, on peut créer une application Windows autonome, ce qui n'est pas possible avec VBA.

Il est cependant possible pour les développeurs d '"intégrer" VBA dans leurs propres applications, en tant que langage de script pour automatiser ces applications.

Modifier : De la FAQ VBA :

Q. Qu'est-ce que Visual Basic pour Applications?

R. Microsoft Visual Basic pour Applications (VBA) est un environnement de programmation intégrable conçu pour permettre aux développeurs de créer des solutions personnalisées en utilisant toute la puissance de Microsoft Visual Basic. Les développeurs qui utilisent des applications qui hébergent VBA peuvent automatiser et étendre les fonctionnalités de l'application, raccourcissant le cycle de développement de solutions commerciales personnalisées.

Notez que VB.NET est même un autre langage, qui partage uniquement la syntaxe avec VB.

fretje
la source
9
En fait, Microsoft fait référence à VB.Net comme "Visual Basic". Voir msdn.microsoft.com/en-us/vbasic/default.aspx .
DOK
19
Oui. C'est un fait qui me donne envie de m'arracher les cheveux chaque fois que je recherche une aide spécifique à VB ou VBA via Google. Décision de marketing stupide.
Tomalak
8
@Tomalak: Voilà pourquoi je viens de noter que ;-)
fretje
2
@DOK: Oui en effet, mais cela ne change pas le fait que VB.NET est un autre langage que le visual basic que "nous les développeurs" connaissons sous le nom de VB6 ou antérieur.
fretje
4
@j_random_hacker Dans ce cas, on a presque l'impression que MS traite VB.Net une variante de VB, au moins basée sur la page vb de Visual Studio - qui ne serait pas exacte. Curieusement, cet article wiki fournit plus d'informations sur son visage que la page MS visual studio :) en.wikipedia.org/wiki/Visual_Basic_.NET . Cependant, une question sur le forum MSDN semble au moins toucher aux différences: social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/…
JackOrangeLantern
41

Voici une réponse plus technique et approfondie à une vieille question: Visual Basic pour Applications (VBA) et Visual Basic (pre-.NET) ne sont pas seulement des langages similaires, ils sont le même langage. Plus précisément:

  • Ils ont la même spécification : la description indépendante de l'implémentation de ce que contient le langage et de sa signification. Vous pouvez le lire ici: [MS-VBAL]: Spécification du langage VBA
  • Ils ont la même plate - forme : ils compilent tous les deux vers Microsoft P-Code , qui est à son tour exécuté par la même machine virtuelle, qui est implémentée dans la dll msvbvm [x.0] .dll.

Dans un vieux livre de référence VB que j'ai rencontré l'année dernière, l'auteur (Paul Lomax) a même affirmé que `` VBA '' a toujours été le nom du langage lui-même, qu'il soit utilisé dans des applications autonomes ou dans des contextes intégrés (tels que MS Office ):

"Avant d'aller plus loin, clarifions simplement un point fondamental. Visual Basic pour Applications (VBA) est le langage utilisé pour programmer en Visual Basic (VB). VB lui-même est un environnement de développement; l'élément langage de cet environnement est VBA. "

Les différences mineures

Hébergé vs autonome : Concrètement, lorsque la plupart des gens disent "VBA", ils signifient spécifiquement "VBA lorsqu'il est utilisé dans MS Office", et ils disent "VB6" pour signifier "VBA utilisé dans la dernière version du VBA autonome compilateur (ie Visual Studio 6) ". L'IDE et le compilateur fournis avec MS Office sont presque identiques à Visual Studio 6, avec la limitation qu'il ne permet pas la compilation vers des fichiers dll ou exe autonomes. Cela signifie à son tour que les classes définies dans les projets VBA intégrés ne sont pas accessibles à partir de consommateurs COM non intégrés, car ils ne peuvent pas être enregistrés.

Poursuite du développement : Microsoft a cessé de produire un compilateur VBA autonome avec Visual Studio 6, alors qu'ils passaient au runtime .NET comme plate-forme de choix. Cependant, l'équipe MS Office continue de maintenir VBA, et a même publié une nouvelle version (VBA7) avec une nouvelle machine virtuelle (maintenant appelée VBA7.dll) à partir de MS Office 2010. La seule différence majeure est que VBA7 possède à la fois un 32- et la version 64 bits et a quelques améliorations pour gérer les différences entre les deux, en particulier en ce qui concerne les appels d'API externes.

Joshua Honig
la source
2
Je me souviens de cette même citation dans le livre de Lomax, mais étant donné toutes les autres déclarations contraires sur ce forum, sur Wikipedia, etc., je me demande qui a raison et pourquoi il y a désaccord! Lomax a également écrit (p. 3), "VBA est le même langage que vous l'utilisiez pour créer une application VB ou pour automatiser une tâche dans Word ou Excel." En outre, "VBA est un langage hébergé et fait partie de la famille d'outils de développement VB."
EJ Mak
1
Si vous choisissez l'aide dans VB6, vous accédez à la référence du langage VBA. VB6, comme Word, héberge le langage VBA. Comme les objets Application sont des objets globaux (standard Automation). VB6 fournit un objet App adapté aux programmes autonomes. Word fournit un objet App pour les macros Word. Notez que le langage est identique, toute référence à des éléments manquants concerne les objets fournis comme l'objet imprimante VB6 - il ne fait pas partie du langage mais de l'hôte.
ACatInLove
15

Voulez-vous comparer VBA avec VB-Classic (VB6 ..) ou VB.NET?

VBA (Visual Basic pour Applications) est un langage de script basé sur vb-classic intégré dans les applications Microsoft Office. Je pense que ses fonctionnalités linguistiques sont similaires à celles de VB5 (il manque juste quelques fonctions intégrées), mais:

Vous avez accès au document de bureau pour lequel vous avez écrit le script VBA et vous pouvez par exemple

  • Écrire des macros (= routines automatisées pour les petites tâches récurrentes dans votre travail de bureau)
  • Définir de nouvelles fonctions pour excel-cell-formula
  • Traiter les données du bureau

Exemple: définir la valeur d'une cellule Excel

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

VBC et -.NET ne sont pas des langages de script. Vous les utilisez pour écrire des applications autonomes avec des IDE distincts que vous ne pouvez pas faire avec VBA (les scripts VBA "existent" simplement dans Office)

VBA n'a rien à voir avec VB.NET (ils ont juste une syntaxe similaire).

Dario
la source
11

En fait, VBA peut être utilisé pour compiler des DLL. Les éditions Office 2000 et Office XP Developer comprenaient un éditeur VBA qui pouvait être utilisé pour créer des DLL à utiliser en tant que compléments COM.

Cette fonctionnalité a été supprimée dans les versions ultérieures (2003 et 2007) avec l'avènement du logiciel VSTO (VS Tools for Office), bien que vous puissiez évidemment créer des compléments COM de manière similaire sans utiliser VSTO (ou VS.Net) par en utilisant VB6 IDE.

Skip R
la source
10
Cette fonctionnalité n'a pas été supprimée. Microsoft n'a tout simplement pas mis à jour «Office XP Developer» pour prendre en charge les versions ultérieures. Vous pouvez toujours installer le développeur et cela fonctionne sans problème. Il n'est tout simplement pas pris en charge par Microsoft. En effet, VBA fourni avec 2003/2007 est toujours la même version VBA que XP / 2002.
AMissico
6

C'est VBA. VBA signifie Visual Basic pour Applications et il est utilisé pour les macros sur les documents Office. Il n'a pas accès aux fonctionnalités de VB.NET, il ressemble donc plus à une version modifiée de VB6, avec des modules complémentaires pour pouvoir travailler sur le document (comme la feuille de calcul dans VBA pour Excel).

par exemple de moi
la source
7
Non, VBA n'est pas une version modifiée de VB5 / 6 - c'est plutôt un sous-ensemble. Jetez un œil à l'Explorateur d'objets dans l'IDE VB5 / 6, et vous verrez la bibliothèque d'objets VBA complète à utiliser et abuser. Cela dit, VBA possède (généralement, mais pas nécessairement) des bibliothèques d'objets supplémentaires qui se chargent par défaut et fournissent des objets globaux par défaut, qui se rapportent à l'environnement hôte du jour.
Karl E. Peterson
5

VB n'est pas une langue . VB est un programme qui héberge VBA, tout comme Office héberge VBA. VB est un ensemble d'objets App, tout comme Word et Excel, et un package de formulaires, tout comme dans Office.

Vous ne pouvez donc écrire que du code VBA en VB.

PS cette information est sur l' onglet INFO sur la page de questions VB pour VB.

De VBA Info

VBA 6, a été livré en 1998 et comprend une myriade d'hôtes sous licence, parmi eux: Office 2000-2010, AutoCAD, PI Processbook et le Visual Basic 6.0 autonome

Sérénité
la source
3
Cette réponse est tout à fait fausse. VBA n'est pas VB6, ce sont des entités distinctes qui partagent de nombreuses fonctionnalités. Cette courte citation ne prouve rien. Dire que ce n'est pas une langue car il s'exécute sur un hôte condamne également des langues telles que JavaScript à des non-langues, ce qui n'est tout simplement pas vrai. De plus, les programmes VB6 peuvent être compilés en programmes autonomes, ce qui fait qu'ils ne nécessitent aucun hôte (à part Windows, c'est-à-dire).
Erik A
@ErikA Non, vous avez mal compris ce qu'ils disent. VB comme dans VB6 est l'application hôte qui exécute VBA, tout comme les applications Office. VB6 se trouve être une application qui vous permet de libérer des binaires pour créer des autonomes. Il y a d'autres réponses ci-dessus qui expliquent les détails.
typedef Miles_Williams MILO
4

VBA signifie Visual Basic For Applications et son implémentation Visual Basic destinée à être utilisée dans la suite Office.

La différence entre eux est que VBA est intégré dans les documents Office (c'est une fonctionnalité Office). VB est l'idé / langage pour développer des applications.

Victor
la source
1

VB (Visual Basic uniquement jusqu'à 6.0) est un sur-ensemble de VBA (Visual Basic pour Applications). Je sais que d'autres y ont en quelque sorte échappé, mais je crois comprendre que la sémantique (c'est-à-dire le vocabulaire) de VBA est incluse dans VB6 (à l'exception des objets spécifiques aux produits Office), par conséquent, VBA est un sous-ensemble de VB6. La syntaxe (c'est-à-dire l'ordre dans lequel les mots sont écrits) est exactement la même dans VBA que dans VB6, mais la différence est que les objets disponibles pour VBA ou VB6 sont différents car ils ont des objectifs différents. Plus précisément, le but de VBA est d'automatiser par programmation les tâches qui peuvent être effectuées dans MS Office, tandis que le but de VB6 est de créer des EXE standard, des contrôles ActiveX, des DLL ActiveX et des EXE ActiveX qui peuvent fonctionner de manière autonome ou dans d'autres programmes tels que MS Office ou Windows.

user65795
la source
VB6 héberge le langage VBA. C'est identique. VB6, en tant qu'hôte, fournit certains objets comme Word le fait lors de son hébergement.
ACatInLove