Diferença entre Visual Basic 6.0 e VBA

208

Qual é a diferença entre os dois. Eu sempre achei que o VBA é uma versão um tanto "aleijada" do VB, mas quando um amigo me perguntou outro dia, eu não tinha idéia de quais são as diferenças reais.

Além disso, quando você usa, por exemplo, o Excel, é VB ou VBA?

Thomas Geritzma
fonte

Respostas:

175

Para quase todos os fins de programação, VBA e VB 6.0 são a mesma coisa.

O VBA não pode compilar seu programa em um binário executável. Você sempre precisará do host (um arquivo do Word e o MS Word, por exemplo) para conter e executar seu projeto. Você também não poderá criar DLLs COM com VBA.

Além disso, há uma diferença no IDE - o VB 6.0 IDE é mais poderoso em comparação. Por outro lado, você tem uma forte integração do aplicativo host no VBA. Objetos globais do aplicativo (como "ActiveDocument") e eventos estão disponíveis sem declaração, portanto, a programação específica do aplicativo é direta.

Ainda assim, nada impede que você inicie o Word, carregue o IDE do VBA e resolva um problema que não tem nenhuma relação com o Word. Não tenho certeza se há algo que o VB 6.0 possa fazer (tecnicamente) e o VBA não. Estou procurando uma planilha de comparação no MSDN.

Tomalak
fonte
7
Parece não haver uma página de comparação concisa nas páginas do microsoft.com ou elas foram ocultadas. Basta dizer que o código VB 6.0 é executado inalterado no VBA, a menos que você faça referências a objetos COM que não são fornecidos com o VBA, é claro.
Tomalak
7
VBA e Vb6 usam o mesmo arquivo DLL, e é por isso que o código é executado em qualquer um. No entanto, existe algo como um objeto Printer no VB6 que não está no VBA e não sei por que. Caso contrário, acredito que não há diferenças nos idiomas base.
Dick Kusleika
46
É por isso que acho que vale a pena acrescentar que abrir um Documento do Office acarreta quase o mesmo risco que abrir um executável.
Oorang
13
O VB também possui os objetos Clipboard, Screen e App, além da coleção Printers. Os pacotes de formulários são completamente diferentes, pois você precisa se esforçar para evitar controles em janelas no VB, mas no VBA é muito mais difícil usar chamadas de API orientadas a hWnd porque a maioria dos controles não tem janelas. E, falando em controles, você pode criar o seu próprio no VB e usá-los no VBA, bem como em outros lugares. Muitas outras pequenas imperfeições - consulte o Pesquisador de objetos (pressione F2 no IDE).
Karl E. Peterson
3
Observe que isso está desatualizado. O VBA foi atualizado para o VBA 7, com suporte para tipos de dados de 64 bits (LongLong, LongPtr) e mais alterações. O VB está parado na versão 6, portanto, não suporta esses novos recursos. Esta resposta discute mais alterações. Em suma, agora existem coisas que o VB não pode fazer, mas o VBA pode.
Erik A
47

VBA significa Visual Basic for Applications e também é o pequeno irmão de scripts "for applications" do VB. O VBA está realmente disponível no Excel, mas também nos outros aplicativos de escritório.

Com o VB, é possível criar um aplicativo do Windows independente, o que não é possível com o VBA.

No entanto, é possível que os desenvolvedores "incorporem" o VBA em seus próprios aplicativos, como uma linguagem de script para automatizar esses aplicativos.

Editar : nas Perguntas frequentes do VBA :

P. o que é o Visual Basic for Applications?

R. O Microsoft Visual Basic for Applications (VBA) é um ambiente de programação incorporável projetado para permitir que os desenvolvedores criem soluções personalizadas usando todo o poder do Microsoft Visual Basic. Os desenvolvedores que usam aplicativos que hospedam o VBA podem automatizar e estender a funcionalidade do aplicativo, reduzindo o ciclo de desenvolvimento de soluções comerciais personalizadas.

Observe que o VB.NET é ainda outro idioma, que compartilha apenas sintaxe com o VB.

fretje
fonte
9
Na verdade, a Microsoft se refere ao VB.Net como "Visual Basic". Consulte msdn.microsoft.com/en-us/vbasic/default.aspx .
DOK
19
Sim. É um fato que me faz querer arrancar meus cabelos toda vez que procuro ajuda específica do VB ou VBA via Google. Decisão de marketing estúpida.
Tomalak
8
@Tomalak: É por isso que acabei de notar isso ;-)
fretje
2
@DOK: Sim, de fato, mas isso não muda o fato de que o VB.NET é outra linguagem que não o visual básico que "nós desenvolvedores" conhecemos como VB6 ou anterior.
fretje
4
@j_random_hacker Nesse caso, parece que a Microsoft trata o VB.Net uma variante do VB, pelo menos com base na página visual studio vb - o que não seria preciso. Curiosamente, este artigo da wiki fornece mais informações do que a página do MS visual studio :) en.wikipedia.org/wiki/Visual_Basic_.NET . No entanto, um MSDN Pergunta fórum parece, pelo menos, toque sobre as diferenças: social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/...
JackOrangeLantern
41

Aqui está uma resposta mais técnica e completa a uma pergunta antiga: Visual Basic for Applications (VBA) e Visual Basic (pré-.NET) não são apenas linguagens semelhantes, são a mesma linguagem. Especificamente:

  • Eles têm a mesma especificação : A descrição independente da implementação do que a linguagem contém e do que ela significa. Você pode lê-lo aqui: [MS-VBAL]: especificação de idioma do VBA
  • Eles têm o mesmo plataforma : ambos compilam com o Microsoft P-Code , que por sua vez é executado exatamente pela mesma máquina virtual, implementada na dll msvbvm [x.0] .dll.

Em um antigo livro de referência do VB que me deparei no ano passado, o autor (Paul Lomax) chegou a afirmar que 'VBA' sempre foi o nome do próprio idioma, seja usado em aplicativos independentes ou em contextos incorporados (como o MS Office ):

"Antes de prosseguirmos, vamos esclarecer um ponto fundamental. O Visual Basic for Applications (VBA) é a linguagem usada para programar no Visual Basic (VB). O próprio VB é um ambiente de desenvolvimento; o elemento de linguagem desse ambiente é o VBA. "

As pequenas diferenças

Hospedado vs. Independente : em termos práticos, quando a maioria das pessoas diz "VBA", significa especificamente "VBA quando usado no MS Office" e diz "VB6" como "VBA usado na última versão do VBA autônomo" compilador (ou seja, Visual Studio 6) ". O IDE e o compilador fornecidos com o MS Office são quase idênticos ao Visual Studio 6, com a limitação de que ele não permite a compilação para arquivos dll ou exe independentes. Por sua vez, isso significa que as classes definidas em projetos VBA incorporados não podem ser acessadas de consumidores COM não incorporados, porque não podem ser registradas.

Desenvolvimento contínuo : a Microsoft parou de produzir um compilador VBA independente com o Visual Studio 6, pois eles mudaram para o tempo de execução .NET como a plataforma preferida. No entanto, a equipe do MS Office continua mantendo o VBA e até lançou uma nova versão (VBA7) com uma nova VM (agora denominada VBA7.dll) começando com o MS Office 2010. A única grande diferença é que o VBA7 possui um 32- e versão de 64 bits e possui alguns aprimoramentos para lidar com as diferenças entre os dois, especificamente no que diz respeito às invocações externas da API.

Joshua Honig
fonte
2
Lembro-me dessa mesma citação no livro de Lomax, mas, considerando todas as outras declarações em contrário neste fórum, na Wikipedia, etc., isso me faz pensar em quem está certo e por que há discordância! Lomax também escreveu (p. 3): "O VBA é o mesmo idioma, esteja você usando para criar um aplicativo VB ou para automatizar alguma tarefa no Word ou Excel". Além disso, "o VBA é uma linguagem hospedada e faz parte da família de ferramentas de desenvolvimento VB".
EJ Mak
1
Se você escolher ajuda no VB6, vá para a referência de idioma do VBA. O VB6, como o Word, hospeda o idioma do VBA. Como os objetos Aplicativo são objetos globais (padrão de automação). O VB6 fornece um objeto App adequado para programas independentes. O Word fornece um objeto de aplicativo para macros do Word. Observe que a linguagem é idêntica; qualquer referência a coisas ausentes é hospedar objetos fornecidos, como o objeto de impressora VB6 - não faz parte da linguagem, mas do host.
ACatInLove
15

Deseja comparar o VBA com o VB-Classic (VB6 ..) ou o VB.NET?

O VBA (Visual Basic for Applications) é uma linguagem de script baseada em vb-classic incorporada nos aplicativos do Microsoft Office. Eu acho que os recursos de linguagem são semelhantes aos do VB5 (faltam apenas algumas funções internas), mas:

Você tem acesso ao documento do escritório para o qual escreveu o script VBA e pode, por exemplo,

  • Escreva macros (= rotinas automatizadas para pequenas tarefas recorrentes em seu escritório)
  • Definir novas funções para excel-cell-formula
  • Processar dados do escritório

Exemplo: Defina o valor de uma célula do Excel

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

VBC e -.NET não são linguagens de script. Você os usa para escrever aplicativos independentes com IDE separado, o que não é possível fazer com o VBA (os scripts VBA simplesmente "existem" no Office)

O VBA não tem nada a ver com o VB.NET (eles apenas têm uma sintaxe semelhante).

Dario
fonte
11

Na verdade, o VBA pode ser usado para compilar DLLs. As edições do Office 2000 e do Office XP Developer incluíam um editor de VBA que poderia ser usado para criar DLLs para uso como suplementos de COM.

Essa funcionalidade foi removida em versões posteriores (2003 e 2007) com o advento do software VSTO (VS Tools for Office), embora obviamente você ainda possa criar suplementos COM de maneira semelhante sem o uso do VSTO (ou VS.Net) por usando o VB6 IDE.

Skip R
fonte
10
Esta funcionalidade não foi removida. A Microsoft não atualizou o "Office XP Developer" para oferecer suporte a versões posteriores. Você ainda pode instalar o desenvolvedor e ele funciona sem problemas. Simplesmente não é suportado pela Microsoft. Isso ocorre porque o VBA fornecido com 2003/2007 ainda é a mesma versão do VBA que o XP / 2002.
AMissico
6

É VBA. VBA significa Visual Basic for Applications e é usado para macros em documentos do Office. Ele não tem acesso aos recursos do VB.NET, por isso é mais uma versão modificada do VB6, com complementos para poder trabalhar no documento (como Planilha no VBA para Excel).

exemplo de mim
fonte
7
Não, o VBA não é uma versão modificada do VB5 / 6 - é um subconjunto. Dê uma olhada no Pesquisador de objetos no IDE do VB5 / 6 e você verá a biblioteca de objetos do VBA completa lá para usar e abusar. Dito isto, o VBA (normalmente, embora não necessariamente) possui bibliotecas de objetos adicionais que são carregadas por padrão e fornecem objetos globais por padrão, que se relacionam com o ambiente do host du jour.
Karl E. Peterson
5

VB não é um idioma . O VB é um programa que hospeda o VBA, assim como o Office hospeda o VBA. O VB é um conjunto de objetos de aplicativos, como o Word e o Excel, e um pacote de formulários, como no Office.

Então você só pode escrever código VBA no VB.

PS: essas informações estão na guia INFO na página de perguntas do VB para o VB.

Informações do VBA

O VBA 6 foi lançado em 1998 e inclui uma infinidade de hosts licenciados, entre eles: Office 2000 - 2010, AutoCAD, PI Processbook e o Visual Basic 6.0 independente

Serenidade
fonte
3
Esta resposta está completamente errada. O VBA não é o VB6, são entidades distintas que compartilham muitos recursos. Essa citação curta não prova nada. Dizer que não é um idioma porque é executado em um host também condena idiomas como JavaScript para outros idiomas, o que simplesmente não é verdade. Além disso, os programas VB6 podem ser compilados em programas autônomos, o que os faz não exigir nenhum host (além do Windows).
Erik A
@ErikA Não, você não entendeu o que eles estão dizendo. O VB como no VB6 é o Aplicativo Host que executa o VBA, assim como os aplicativos do Office. Por acaso, o VB6 é um aplicativo que permite liberar binários para criar autônomos. Existem outras respostas acima que explicam os detalhes.
Typedef Miles_Williams MILO
4

VBA significa Visual Basic for Applications e é uma implementação do Visual Basic destinada a ser usada no Office Suite.

A diferença entre eles é que o VBA é incorporado aos documentos do Office (é um recurso do Office). VB é a ide / linguagem para o desenvolvimento de aplicativos.

Vencedor
fonte
1

VB (Visual Basic somente até 6.0) é um superconjunto do VBA (Visual Basic for Applications). Sei que outras pessoas escaparam disso, mas meu entendimento é que a semântica (ou seja, o vocabulário) do VBA está incluída no VB6 (exceto para objetos específicos dos produtos do Office); portanto, o VBA é um subconjunto do VB6. A sintaxe (ou seja, a ordem na qual as palavras são escritas) é exatamente a mesma no VBA, como seria no VB6, mas a diferença é que os objetos disponíveis para o VBA ou VB6 são diferentes porque têm finalidades diferentes. O objetivo específico do VBA é automatizar programaticamente as tarefas que podem ser realizadas no MS Office, enquanto o objetivo do VB6 é criar EXE padrão, controles ActiveX, DLLs ActiveX e ActiveX EXEs, que podem funcionar de forma independente ou em outros programas como o MS Office ou Windows.

user65795
fonte
O VB6 hospeda o idioma do VBA. É idêntico. O VB6, como host, fornece determinados objetos, como o Word faz durante a hospedagem.
ACatInLove 07/02