Разница между Visual Basic 6.0 и VBA

208

Какая разница между двумя. Я всегда думал, что VBA - это несколько «урезанная» версия VB, но когда один из друзей спросил меня на днях, я понятия не имел, каковы же реальные различия.

Кроме того, когда вы используете, например, Excel, это VB или VBA?

Томас Герицма
источник

Ответы:

175

Практически для всех целей программирования VBA и VB 6.0 - это одно и то же.

VBA не может скомпилировать вашу программу в исполняемый двоичный файл. Вам всегда понадобится хост (например, файл Word и MS Word) для хранения и выполнения вашего проекта. Вы также не сможете создавать COM DLL с помощью VBA.

Кроме того, в IDE есть разница - IDE VB 6.0 является более мощным по сравнению. С другой стороны, у вас есть тесная интеграция хост-приложения в VBA. Глобальные объекты приложения (например, «ActiveDocument») и события доступны без объявления, поэтому программирование для конкретного приложения является простым.

Тем не менее, ничто не мешает вам запускать Word, загружать VBA IDE и решать проблему, не имеющую никакого отношения к Word. Я не уверен, что есть что-то, что может сделать VB 6.0 (технически), а VBA - нет. Я ищу сравнительный лист на MSDN, хотя.

Томалак
источник
7
Кажется, на страницах microsoft.com нет краткой страницы сравнения, или они хорошо их скрывали. Достаточно сказать, что код VB 6.0 работает без изменений в VBA, если, конечно, вы не сделаете ссылки на COM-объекты, которые не поставляются с VBA.
Томалак
7
VBA и Vb6 используют один и тот же файл dll, поэтому код работает и в них. Однако в VB6 есть что-то вроде объекта Printer, которого нет в VBA, и я не знаю, почему это так. В противном случае, я считаю, что нет никаких отличий в базовых языках.
Дик Куслейка
46
Вот почему я думаю, что стоит добавить, что открытие Office Document сопряжено практически с тем же риском, что и открытие исполняемого файла.
Oorang
13
VB также имеет объекты Clipboard, Screen и App, в дополнение к коллекции Printers. Пакеты форм совершенно разные, так как вы должны изо всех сил избегать оконных элементов управления в VB, но в VBA намного сложнее использовать hWnd-ориентированные вызовы API, потому что большинство элементов управления без окон. И, говоря об элементах управления, вы можете создавать свои собственные в VB и использовать их как в VBA, так и в других местах. Множество других проблем - см. Обозреватель объектов (нажмите F2 в IDE).
Карл Е. Петерсон
3
Обратите внимание, что это устарело. VBA был обновлен до VBA 7 с поддержкой 64-битных типов данных (LongLong, LongPtr) и другими изменениями. VB застрял в версии 6, поэтому он не поддерживает эти новые функции. Этот ответ обсуждает больше изменений. Короче говоря, есть вещи, которые VB не может сделать, но VBA может.
Эрик А
47

VBA расшифровывается как Visual Basic для приложений, так же как и маленький «V для приложений». VBA действительно доступен в Excel, но также и в других офисных приложениях.

С помощью VB можно создать отдельное приложение для Windows, что невозможно с VBA.

Однако разработчики могут «встраивать» VBA в свои собственные приложения в качестве языка сценариев для автоматизации этих приложений.

Изменить : из часто задаваемых вопросов VBA :

В. Что такое Visual Basic для приложений?

A. Microsoft Visual Basic для приложений (VBA) - это встраиваемая среда программирования, позволяющая разработчикам создавать собственные решения с использованием всех возможностей Microsoft Visual Basic. Разработчики, использующие приложения, в которых размещается VBA, могут автоматизировать и расширять функциональность приложения, сокращая цикл разработки пользовательских бизнес-решений.

Обратите внимание, что VB.NET - это даже другой язык, который использует синтаксис только с VB.

fretje
источник
9
На самом деле Microsoft называет VB.Net «Visual Basic». См. Msdn.microsoft.com/en-us/vbasic/default.aspx .
DOK
19
Да. Это факт, который заставляет меня хотеть вырывать голову каждый раз, когда я ищу VB или VBA-специфическую помощь через Google. Глупое маркетинговое решение.
Томалак
8
@Tomalak: Вот почему я просто Отметил , что ;-)
fretje
2
@DOK: Да, действительно, но это не меняет того факта, что VB.NET - это другой язык, чем Visual Basic, который мы, разработчики, знаем как VB6 или ранее.
fretje
4
@j_random_hacker В этом случае почти создается впечатление, что MS рассматривает VB.Net как вариант VB, по крайней мере, на основе страницы vb visual studio - что было бы неточно. Как ни странно, эта вики-статья содержит больше информации, чем страница MS Visual Studio :) en.wikipedia.org/wiki/Visual_Basic_.NET . Однако вопрос на форуме MSDN, по крайней мере, касается различий: social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/…
JackOrangeLantern
41

Вот более технический и подробный ответ на старый вопрос: Visual Basic для приложений (VBA) и Visual Basic (до .NET) - это не просто похожие языки, это один и тот же язык. В частности:

  • Они имеют одну и ту же спецификацию : независимое от реализации описание того, что содержит язык и что оно означает. Вы можете прочитать это здесь: [MS-VBAL]: Спецификация языка VBA
  • Они имеют одну и ту же платформу : обе они компилируются в Microsoft P-Code , который, в свою очередь, выполняется точно такой же виртуальной машиной, которая реализована в dll msvbvm [x.0] .dll.

В старом справочнике по VB, с которым я сталкивался в прошлом году, автор (Пол Ломакс) даже утверждал, что «VBA» всегда был названием самого языка, независимо от того, используется ли он в автономных приложениях или во встроенных контекстах (таких как MS Office). ):

«Прежде чем идти дальше, давайте просто проясним фундаментальный момент. Visual Basic для приложений (VBA) - это язык, используемый для программирования в Visual Basic (VB). Сам VB является средой разработки; языковым элементом этой среды является VBA. "

Незначительные различия

Размещенный или автономный : на практике, когда большинство людей говорят «VBA», они конкретно означают «VBA при использовании в MS Office», а «VB6» означает «VBA, использованный в последней версии автономного VBA». компилятор (т.е. Visual Studio 6) ". IDE и компилятор в комплекте с MS Office практически идентичны Visual Studio 6, за исключением того, что они не позволяют выполнять компиляцию в автономные файлы dll или exe. Это, в свою очередь, означает, что классы, определенные во встроенных проектах VBA, недоступны для не встроенных потребителей COM, поскольку они не могут быть зарегистрированы.

Продолжение разработки : Microsoft прекратила выпускать автономный компилятор VBA с Visual Studio 6, поскольку они переключились на среду выполнения .NET в качестве предпочтительной платформы. Тем не менее, команда MS Office продолжает поддерживать VBA и даже выпустила новую версию (VBA7) с новой виртуальной машиной (теперь просто называемой VBA7.dll), начиная с MS Office 2010. Единственное существенное отличие состоит в том, что VBA7 имеет 32- и 64-битная версия и имеет несколько улучшений для обработки различий между ними, особенно в отношении внешних вызовов API.

Джошуа Хониг
источник
2
Я вспоминаю ту же самую цитату в книге Ломакса, но, учитывая все другие утверждения об обратном на этом форуме, в Википедии и т. Д., Я удивляюсь, кто прав и почему существуют разногласия! Ломакс также писал (стр. 3): «VBA - это один и тот же язык, используете ли вы его для создания приложения VB или для автоматизации какой-либо задачи в Word или Excel». Кроме того, «VBA является размещенным языком и частью семейства инструментов разработки VB».
EJ Мак
1
Если вы выбираете помощь в VB6, вы переходите к справочнику по языку VBA. VB6, как и Word, поддерживает язык VBA. В качестве объектов приложения используются глобальные объекты (стандарт автоматизации). VB6 предоставляет объект App, подходящий для автономных программ. Word предоставляет объект App для макросов Word. Обратите внимание, что язык идентичен, любая ссылка на отсутствующие вещи относится к предоставленным объектам, таким как объект принтера VB6 - это не часть языка, а хост.
ACatInLove
15

Хотите сравнить VBA с VB-Classic (VB6 ..) или VB.NET?

VBA (Visual Basic для приложений) - это язык сценариев на основе vb-classic, встроенный в приложения Microsoft Office. Я думаю, что его языковые возможности аналогичны VB5 (ему просто не хватает нескольких встроенных функций), но:

У вас есть доступ к офисному документу, для которого вы написали VBA-скрипт, и вы можете, например,

  • Напишите макросы (= автоматизированные процедуры для небольших повторяющихся задач в вашей офисной работе)
  • Определить новые функции для Excel-Cell-Formula
  • Обработка офисных данных

Пример: установить значение Excel-ячейки

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

VBC и-.NET не являются языками сценариев. Вы используете их для написания автономных приложений с отдельными IDE, которые вы не можете сделать с VBA (VBA-скрипты просто «существуют» в Office)

VBA не имеет ничего общего с VB.NET (у них просто похожий синтаксис).

Dario
источник
11

На самом деле VBA может использоваться для компиляции DLL. В редакции Office 2000 и Office XP Developer включен редактор VBA, который можно использовать для создания библиотек DLL для использования в качестве надстроек COM.

Эта функциональность была удалена в более поздних версиях (2003 и 2007) с появлением программного обеспечения VSTO (VS Tools для Office), хотя очевидно, что вы все еще можете создавать надстройки COM аналогичным образом без использования VSTO (или VS.Net) используя VB6 IDE.

Пропустить R
источник
10
Эта функциональность не была удалена. Microsoft просто не обновила «Office XP Developer» для поддержки более поздних версий. Вы все еще можете установить разработчика, и он работает без проблем. Это просто не поддерживается Microsoft. Это связано с тем, что VBA, поставляемая с 2003/2007, все еще является той же версией VBA, что и XP / 2002.
AMissico
6

Это VBA. VBA означает Visual Basic для приложений и используется для макросов в документах Office. Он не имеет доступа к функциям VB.NET, поэтому он больше похож на модифицированную версию VB6 с надстройками для работы с документом (например, с рабочим листом в VBA для Excel).

пример меня
источник
7
Нет, VBA не является модифицированной версией VB5 / 6, скорее это подмножество. Взгляните на Object Browser в VB5 / 6 IDE, и вы увидите полную библиотеку объектов VBA, которую можно использовать и злоупотреблять. Тем не менее, VBA (как правило, хотя и не обязательно) имеет дополнительные библиотеки объектов, которые загружаются по умолчанию и предоставляют глобальные объекты по умолчанию, которые относятся к среде хоста du jour.
Карл Петерсон
5

В.Б. это не язык . VB - это программа, в которой размещается VBA, так же, как в Office размещается VBA. VB - это набор объектов App, как в Word и Excel, и пакет форм, как в Office.

Таким образом, вы можете писать код VBA только на VB.

PS эта информация находится на вкладке INFO на странице вопросов VB для VB.

Из VBA Info

VBA 6 был выпущен в 1998 году и включает в себя множество лицензированных хостов, среди которых: Office 2000-2010, AutoCAD, PI Processbook и автономный Visual Basic 6.0.

безмятежность
источник
3
Этот ответ совершенно неверный. VBA - это не VB6, это отдельные объекты, которые имеют много общих возможностей. Эта короткая цитата ничего не доказывает. Сказать, что это не язык, потому что он работает на хосте, также осуждает такие языки, как JavaScript, не на языках, что просто не соответствует действительности. Кроме того, программы VB6 могут быть скомпилированы в автономные программы, что делает их не требующими хоста (кроме Windows).
Эрик А
@ErikA Нет, вы не поняли, что они говорят. VB, как и в VB6, является хост-приложением, которое запускает VBA, как и приложения Office. VB6 просто является приложением, которое позволяет вам выпускать двоичные файлы для создания автономных приложений. Есть и другие ответы выше, которые объясняют детали.
typedef Miles_Williams MILO
4

VBA расшифровывается как Visual Basic For Applications и его реализация Visual Basic, предназначенная для использования в Office Suite.

Разница между ними заключается в том, что VBA встроен в документы Office (это функция Office). VB - это иде / язык для разработки приложений.

Виктор
источник
1

VB (Visual Basic только до 6.0) - это расширенный набор VBA (Visual Basic для приложений). Я знаю, что другие отчасти ускользали от этого, но я понимаю, что семантика (то есть словарь) VBA включена в VB6 (за исключением объектов, специфичных для продуктов Office), поэтому VBA является подмножеством VB6. Синтаксис (т. Е. Порядок, в котором написаны слова) в VBA точно такой же, как и в VB6, но различие заключается в том, что объекты, доступные для VBA или VB6, различны, поскольку они имеют разные цели. В частности, целью VBA является программная автоматизация задач, которые можно выполнять в MS Office, тогда как целью VB6 является создание стандартных EXE, ActiveX Controls, ActiveX DLL и ActiveX EXE, которые могут работать как отдельно, так и в других программах, таких как MS Office или Windows.

user65795
источник
VB6 содержит язык VBA. Это идентично. VB6, как хост, предоставляет определенные объекты, как Word, когда его хостинг.
ACatInLove