Diferencia entre Visual Basic 6.0 y VBA

208

Cuál es la diferencia entre los dos. Siempre pensé que VBA es una versión algo 'lisiada' de VB, pero cuando un amigo me preguntó el otro día no tenía idea de cuáles son las diferencias reales.

Además, cuando usa, por ejemplo, Excel, ¿eso es VB o VBA?

Thomas Geritzma
fuente

Respuestas:

175

Para casi todos los propósitos de programación, VBA y VB 6.0 son lo mismo.

VBA no puede compilar su programa en un binario ejecutable. Siempre necesitará el host (un archivo de Word y MS Word, por ejemplo) para contener y ejecutar su proyecto. Tampoco podrá crear DLL COM con VBA.

Aparte de eso, hay una diferencia en el IDE: el IDE de VB 6.0 es más poderoso en comparación. Por otro lado, tiene una estrecha integración de la aplicación host en VBA. Los objetos globales de la aplicación (como "ActiveDocument") y los eventos están disponibles sin declaración, por lo que la programación específica de la aplicación es sencilla.

Aún así, nada le impide encender Word, cargar el IDE de VBA y resolver un problema que no tiene relación alguna con Word. No estoy seguro de si hay algo que VB 6.0 pueda hacer (técnicamente), y VBA no. Sin embargo, estoy buscando una hoja de comparación en el MSDN.

Tomalak
fuente
77
Parece que no hay una página de comparación concisa en las páginas de microsoft.com, o las ocultaron bien. Baste decir que el código VB 6.0 se ejecuta sin modificaciones en VBA, a menos que haga referencias a objetos COM que no se envían con VBA, por supuesto.
Tomalak
77
VBA y Vb6 usan el mismo archivo dll, por lo que el código se ejecuta en cualquiera de ellos. Sin embargo, hay algo como un objeto Printer en VB6 que no está en VBA y no sé por qué. De lo contrario, creo que no hay diferencias en los idiomas base.
Dick Kusleika
46
Por eso creo que vale la pena agregar que abrir un documento de Office conlleva casi el mismo riesgo que abrir un ejecutable.
Oorang
13
VB también tiene los objetos Portapapeles, Pantalla y Aplicación, además de la colección Impresoras. Los paquetes de formularios son completamente diferentes, ya que debe hacer todo lo posible para evitar los controles en ventanas en VB, pero en VBA es mucho más difícil usar llamadas API orientadas a hWnd porque la mayoría de los controles no tienen ventanas. Y, hablando de controles, puede crear los suyos en VB y usarlos en VBA y en otros lugares. Muchos otros inconvenientes: vea el Navegador de objetos (presione F2 en el IDE)
Karl E. Peterson
3
Tenga en cuenta que esto está desactualizado. VBA se ha actualizado a VBA 7, con soporte para tipos de datos de 64 bits (LongLong, LongPtr) y más cambios. VB está atascado en la versión 6, por lo que no admite estas nuevas características. Esta respuesta discute más cambios. En resumen, ahora hay cosas que VB no puede hacer, pero VBA sí.
Erik A
47

VBA significa Visual Basic para Aplicaciones y también lo es el pequeño hermano de secuencias de comandos "para aplicaciones" de VB. VBA está disponible en Excel, pero también en las otras aplicaciones de oficina.

Con VB, uno puede crear una aplicación de Windows independiente, que no es posible con VBA.

Sin embargo, es posible que los desarrolladores "incrusten" VBA en sus propias aplicaciones, como lenguaje de script para automatizar esas aplicaciones.

Editar : de las preguntas frecuentes de VBA :

P. ¿Qué es Visual Basic para aplicaciones?

R. Microsoft Visual Basic para Aplicaciones (VBA) es un entorno de programación integrable diseñado para permitir a los desarrolladores crear soluciones personalizadas utilizando todo el poder de Microsoft Visual Basic. Los desarrolladores que utilizan aplicaciones que alojan VBA pueden automatizar y ampliar la funcionalidad de la aplicación, acortando el ciclo de desarrollo de soluciones empresariales personalizadas.

Tenga en cuenta que VB.NET es incluso otro idioma, que solo comparte la sintaxis con VB.

fretje
fuente
9
En realidad, Microsoft se refiere a VB.Net como "Visual Basic". Ver msdn.microsoft.com/en-us/vbasic/default.aspx .
DOK
19
Si. Es un hecho que me hace querer arrancarme el pelo cada vez que busco ayuda específica de VB o VBA a través de Google. Estúpida decisión de marketing.
Tomalak
8
@Tomalak: Por eso acabo de notar eso ;-)
fretje
2
@DOK: Sí, pero eso no cambia el hecho de que VB.NET es otro lenguaje que el básico visual que "nosotros los desarrolladores" conocemos como VB6 o anterior.
fretje
44
@j_random_hacker En este caso, casi parece que MS trata a VB.Net como una variante de VB, al menos basada en la página visual studio vb, lo que no sería exacto. Curiosamente, este artículo wiki proporciona más información en su cara que la página de MS Visual Studio :) en.wikipedia.org/wiki/Visual_Basic_.NET . Sin embargo, una pregunta del foro de MSDN parece al menos tocar las diferencias: social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/…
JackOrangeLantern
41

Aquí hay una respuesta más técnica y exhaustiva a una vieja pregunta: Visual Basic para Aplicaciones (VBA) y Visual Basic (pre.NET) no son solo lenguajes similares, son el mismo lenguaje. Específicamente:

  • Tienen la misma especificación : la descripción independiente de la implementación de lo que contiene el lenguaje y lo que significa. Puede leerlo aquí: [MS-VBAL]: Especificación de lenguaje VBA
  • Tienen la misma plataforma : ambos compilan en Microsoft P-Code , que a su vez es ejecutado por la misma máquina virtual, que se implementa en el dll msvbvm [x.0] .dll.

En un viejo libro de referencia de VB que encontré el año pasado, el autor (Paul Lomax) incluso afirmó que 'VBA' siempre ha sido el nombre del lenguaje en sí, ya sea que se use en aplicaciones independientes o en contextos integrados (como MS Office ):

"Antes de continuar, aclaremos un punto fundamental. Visual Basic para Aplicaciones (VBA) es el lenguaje utilizado para programar en Visual Basic (VB). VB en sí es un entorno de desarrollo; el elemento del lenguaje de ese entorno es VBA". "

Las pequeñas diferencias

Hospedado versus independiente : en términos prácticos, cuando la mayoría de las personas dicen "VBA", significan específicamente "VBA cuando se usa en MS Office", y dicen "VB6" para significar "VBA usado en la última versión del VBA independiente". compilador (es decir, Visual Studio 6) ". El IDE y el compilador incluido con MS Office es casi idéntico a Visual Studio 6, con la limitación de que no permite la compilación de archivos dll o exe independientes. Esto a su vez significa que las clases definidas en los proyectos VBA integrados no son accesibles desde los consumidores COM no integrados, ya que no se pueden registrar.

Desarrollo continuo : Microsoft dejó de producir un compilador de VBA autónomo con Visual Studio 6, ya que cambiaron al tiempo de ejecución de .NET como la plataforma elegida. Sin embargo, el equipo de MS Office continúa manteniendo VBA e incluso lanzó una nueva versión (VBA7) con una nueva VM (ahora llamada VBA7.dll) a partir de MS Office 2010. La única diferencia importante es que VBA7 tiene un 32- y la versión de 64 bits y tiene algunas mejoras para manejar las diferencias entre los dos, específicamente con respecto a las invocaciones de API externas.

Joshua Honig
fuente
2
Recuerdo esa misma cita en el libro de Lomax, pero dadas todas las otras declaraciones en sentido contrario en este foro, en Wikipedia, etc., me hace preguntarme quién tiene razón y por qué hay desacuerdo. Lomax también escribió (p. 3): "VBA es el mismo lenguaje, ya sea que lo esté utilizando para crear una aplicación VB o para automatizar alguna tarea en Word o Excel". Además, "VBA es un lenguaje alojado y parte de la familia de herramientas de desarrollo VB".
EJ Mak
1
Si elige ayuda en VB6, vaya a la referencia de lenguaje VBA. VB6, como Word, aloja el lenguaje VBA. Como los objetos de aplicación son objetos globales (estándar de automatización). VB6 proporciona un objeto de aplicación adecuado para programas independientes. Word proporciona un objeto de aplicación para macros de Word. Tenga en cuenta que el lenguaje es idéntico, cualquier referencia a cosas que faltan es alojar objetos provistos como el objeto de impresora VB6; no es parte del lenguaje sino del host.
ACatInLove
15

¿Quieres comparar VBA con VB-Classic (VB6 ..) o VB.NET?

VBA (Visual Basic para Aplicaciones) es un lenguaje de script basado en vb-classic integrado en aplicaciones de Microsoft Office. Creo que sus características de lenguaje son similares a las de VB5 (solo carece de algunas funciones integradas), pero:

Tiene acceso al documento de Office para el que escribió el script VBA y, por lo tanto, puede

  • Escriba macros (= rutinas automatizadas para pequeñas tareas recurrentes en su trabajo de oficina)
  • Definir nuevas funciones para excel-cell-formula
  • Procesar datos de oficina

Ejemplo: establecer el valor de una celda de Excel

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

VBC y -.NET no son lenguajes de script. Los usa para escribir aplicaciones independientes con IDE independientes que no puede hacer con VBA (los scripts de VBA simplemente "existen" en Office)

VBA no tiene nada que ver con VB.NET (solo tienen una sintaxis similar).

Darío
fuente
11

En realidad, VBA se puede utilizar para compilar archivos DLL. Las ediciones de Office 2000 y Office XP Developer incluyeron un editor VBA que podría usarse para hacer DLL para usar como complementos COM.

Esta funcionalidad se eliminó en versiones posteriores (2003 y 2007) con el advenimiento del software VSTO (VS Tools for Office), aunque obviamente todavía podría crear complementos COM de manera similar sin el uso de VSTO (o VS.Net) por usando VB6 IDE.

Saltar R
fuente
10
Esta funcionalidad no fue eliminada. Microsoft simplemente no actualizó "Office XP Developer" para admitir versiones posteriores. Todavía puede instalar el desarrollador y funciona sin problemas. Simplemente no no es compatible con Microsoft. Esto se debe a que VBA que se incluye con 2003/2007 sigue siendo la misma versión de VBA que XP / 2002.
AMissico
6

Es VBA. VBA significa Visual Basic para Aplicaciones , y se usa para macros en documentos de Office. No tiene acceso a las funciones de VB.NET, por lo que es más como una versión modificada de VB6, con complementos para poder trabajar en el documento (como Hoja de trabajo en VBA para Excel).

instancia de mi
fuente
77
No, VBA no es una versión modificada de VB5 / 6, sino que es un subconjunto. Eche un vistazo al Object Browser en el IDE VB5 / 6, y verá la biblioteca de objetos VBA completa allí para usar y abusar. Dicho esto, VBA (generalmente, aunque no necesariamente) tiene bibliotecas de objetos adicionales que se cargan de manera predeterminada y proporcionan objetos globales de forma predeterminada, que se relacionan con el entorno de host del día.
Karl E. Peterson
5

VB no es un lenguaje . VB es un programa que aloja VBA, al igual que Office aloja VBA. VB es un conjunto de objetos de aplicación, al igual que Word y Excel, y un paquete de formularios, como en Office.

Por lo tanto, solo puede escribir código VBA en VB.

PD: esta información se encuentra en la pestaña INFO en la página de preguntas de VB para VB.

De VBA Info

VBA 6, se envió en 1998 e incluye una miríada de hosts con licencia, entre ellos: Office 2000 - 2010, AutoCAD, PI Processbook y el Visual Basic 6.0 independiente

Serenidad
fuente
3
Esta respuesta es completamente incorrecta. VBA no es VB6, esas son entidades distintas que comparten muchas características. Esa breve cita no prueba nada. Decir que no es un idioma porque se ejecuta en un host también condena idiomas como JavaScript a no idiomas, lo que simplemente no es cierto. Además, los programas VB6 se pueden compilar en programas independientes, lo que hace que no requieran ningún host (además de Windows, es decir).
Erik A
@ Erika No, no has entendido mal lo que están diciendo. VB como en VB6 es la aplicación de host que ejecuta VBA, al igual que las aplicaciones de Office. VB6 resulta ser una aplicación que le permite liberar binarios para crear autónomos. Hay otras respuestas anteriores que explican los detalles.
typedef Miles_Williams MILO
4

VBA significa Visual Basic para aplicaciones y es una implementación de Visual Basic destinada a usarse en Office Suite.

La diferencia entre ellos es que VBA está incrustado dentro de los documentos de Office (es una característica de Office). VB es el ide / lenguaje para desarrollar aplicaciones.

Víctor
fuente
1

VB (Visual Basic solo hasta 6.0) es un superconjunto de VBA (Visual Basic para aplicaciones). Sé que otros han eludido esto, pero entiendo que la semántica (es decir, el vocabulario) de VBA está incluida en VB6 (a excepción de los objetos específicos de los productos de Office), por lo tanto, VBA es un subconjunto de VB6. La sintaxis (es decir, el orden en que se escriben las palabras) es exactamente la misma en VBA que en VB6, pero la diferencia es que los objetos disponibles para VBA o VB6 son diferentes porque tienen propósitos diferentes. Específicamente, el propósito de VBA es automatizar mediante programación las tareas que se pueden realizar en MS Office, mientras que el propósito de VB6 es crear EXE estándar, controles ActiveX, ActiveX DLL y ActiveX EXE que pueden funcionar de manera independiente o en otros programas como MS Office o Windows.

usuario65795
fuente
VB6 aloja el lenguaje VBA. Es idéntico VB6, como host, proporciona ciertos objetos como Word cuando lo aloja.
ACatInLove