Різниця між Visual Basic 6.0 та VBA


208

Яка різниця між ними. Я завжди думав, що VBA є дещо «калікою» версії VB, але коли друг запитав мене днями, я не мав уявлення, які насправді відмінності.

Також, коли ви використовуєте, наприклад, Excel, це VB чи VBA?

Відповіді:


175

Майже для всіх цілей програмування VBA та VB 6.0 - це одне і те ж.

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

Крім того, є і різниця в IDE - VB 6.0 IDE є більш потужним у порівнянні. З іншого боку, у вас є тісна інтеграція хост-програми в 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 Office несе такий же ризик, як відкриття виконавчого файла.
Ооранг

13
Крім колекції принтерів, VB також має об'єкти "Буфер обміну", "Екран" та "App". Пакети форм абсолютно різні, тому що вам доведеться вийти зі шляху, щоб уникнути віконних елементів керування у VB, але у VBA набагато складніше використовувати виклики API, орієнтовані на hWnd, оскільки більшість елементів керування є без вікон. І, кажучи про елементи управління, ви можете авторувати свої власні записи в VB та використовувати їх у VBA, а також в інших місцях. Багато інших нігтів - див. Оглядач об’єктів (натисніть F2 в IDE).
Карл Е. Петерсон

3
Зауважте, що це застаріло. VBA було оновлено до VBA 7, підтримуючи 64-бітові типи даних (LongLong, LongPtr) та інші зміни. VB застряг у версії 6, тому він не підтримує ці нові функції. Ця відповідь обговорює більше змін. Коротше кажучи, зараз є те, що VB не може зробити, але VBA може.
Ерік А

47

VBA розшифровується як Visual Basic для додатків, так і малий брат сценарію "для додатків". VBA дійсно доступний в Excel, але також і в інших офісних додатках.

За допомогою VB можна створити автономну програму Windows, що неможливо з VBA.

Однак розробники можуть "вбудовувати" VBA у власні програми, як мову сценаріїв для автоматизації цих програм.

Редагувати : з FAQ щодо VBA :

В. Що таке Visual Basic для додатків?

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

Зауважте, що VB.NET - це ще одна мова, яка розділяє лише синтаксис з VB.


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 - це інша мова, ніж візуальна основна, яку "ми розробники" знаємо як VB6 або раніше.
fretje

4
@j_random_hacker У цьому випадку майже не відчуває, що MS розглядає VB.Net варіант VB, принаймні на основі сторінки візуальної студії vb - який би не був точним. Як не дивно, ця стаття у вікі надає більше інформації про її обличчя, ніж сторінка візуальної студії MS :) en.wikipedia.org/wiki/Visual_Basic_.NET . Однак питання форуму MSDN виглядає хоча б торкнутися відмінностей: social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/…
JackOrangeLantern

41

Ось більш технічний і ретельний відповідь на старе питання: Visual Basic для додатків (VBA) і Visual Basic (pre-.NET) - це не просто подібні мови, вони однакова мова. Конкретно:

  • Вони мають ту саму специфікацію : Незалежний від реалізації опис того, що мова містить і що вона означає. Ви можете прочитати його тут: [MS-VBAL]: Специфікація мови VBA
  • Вони мають однакову платформу : вони обоє компілюють у P-код Microsoft , який у свою чергу виконується точно такою ж віртуальною машиною, яка реалізована в 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) з новою VM (тепер якраз називається VBA7.dll), починаючи з MS Office 2010 року. Єдина основна відмінність полягає в тому, що VBA7 має як 32- 64-розрядна версія та має декілька вдосконалень для вирішення відмінностей між ними, зокрема стосовно зовнішніх викликів API.


2
Я пригадую цю саму цитату в книзі Ломакса, але з огляду на всі інші твердження, що протилежні на цьому форумі, у Вікіпедії тощо, змушує мене замислитися, хто правий, і чому є незгода! Lomax також писав (стор. 3): "VBA - це одна і та ж мова, незалежно від того, ви використовуєте її для створення програми VB або для автоматизації деяких завдань у Word або Excel." Крім того, "VBA - це розміщена мова та частина інструментів розробки VB сімейства".
EJ Mak

1
Якщо ви вибрали допомогу в VB6, перейдіть до посилання на мову VBA. VB6, як і Word, розміщує мову VBA. Оскільки об'єктами програми є глобальні об'єкти (стандарт автоматизації). VB6 надає об’єкт App, який підходить для автономних програм. Word забезпечує об’єкт програми для макросів Word. Зверніть увагу, що мова однакова, будь-яка посилання на речі, які відсутні, полягає у розміщенні таких об’єктів, як об’єкт принтера VB6 - це не частина мови, а хост.
ACatInLove

15

Ви хочете порівняти VBA з VB-Classic (VB6 ..) або VB.NET?

VBA (Visual Basic for Applications) - це сценарій на основі vb-класики, вбудований у додатки Microsoft Office. Я думаю, що мовні особливості схожі на VB5 (йому просто бракує декількох вбудованих функцій), але:

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

  • Пишіть макроси (= автоматизовані процедури для невеликих повторюваних завдань у вашій офісній роботі)
  • Визначте нові функції формули excel-cell
  • Обробляти дані офісу

Приклад: Встановіть значення комірки excel

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

VBC і -.NET - це не мови для скриптів. Ви використовуєте їх для написання автономних додатків з окремими IDE, які ви не можете зробити з VBA (сценарії VBA просто "існують" в Office)

VBA не має нічого спільного з VB.NET (вони просто мають подібний синтаксис).


11

Насправді VBA можна використовувати для компіляції DLL. Видання для розробників Office 2000 та Office XP включали редактор VBA, який можна використовувати для створення DLL-файлів для використання як COM Addins.

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


10
Цю функціональність не було видалено. Microsoft просто не оновлювала "Office XP Developer" для підтримки пізніших версій. Ви все ще можете встановити розробник, і він працює без проблем. Microsoft просто не підтримується Microsoft. Це тому, що VBA, що постачається з 2003/2007, все ще є тією ж версією VBA, що і XP / 2002.
AMissico

6

Це VBA. VBA означає Visual Basic для додатків , і він використовується для макросів в документах Office. У нього немає доступу до функцій VB.NET, тому він більше схожий на модифіковану версію VB6, з додатками, щоб мати можливість працювати над документом (як Workheet у VBA для Excel).


7
Ні, VBA не є модифікованою версією VB5 / 6 - скоріше, це підмножина. Погляньте на браузер об’єктів у IDE VB5 / 6, і ви побачите там повну бібліотеку об’єктів VBA для використання та зловживання. Однак, VBA має (як правило, хоча і не обов'язково) додаткові бібліотеки об'єктів, які завантажуються за замовчуванням і надають глобальні об'єкти за замовчуванням, які відносяться до хост-середовища du jour.
Карл Е. Пітерсон

5

VB - це не мова . VB - програма, яка розміщує VBA так само, як Office приймає VBA. VB - це набір об’єктів App, як і Word та Excel, і пакет форм, як і в Office.

Таким чином, ви можете записувати код VBA лише в VB.

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

З інформації про VBA

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 управління, DLL ActiveX і ActiveX EXE, які можуть працювати як окремо, так і в інших програмах, таких як MS Office або Windows.


VB6 розміщує мову VBA. Він ідентичний. VB6 як хост надає певні об'єкти, як це робить Word під час свого хостингу.
ACatInLove
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.