Visual Basic 6.0とVBAの違い


208

2つの違いは何ですか。VBAはVBのいくらか「不自由な」バージョンだといつも思っていましたが、先日友人から質問があったとき、実際の違いは何なのかわかりませんでした。

また、たとえばExcelを使用する場合、そのVBまたはVBAですか?

回答:


175

ほぼすべてのプログラミング目的で、VBAとVB 6.0は同じものです。

VBAはプログラムを実行可能なバイナリにコンパイルできません。プロジェクトを含めて実行するには、常にホスト(WordファイルやMS Wordなど)が必要です。また、VBAでCOM DLLを作成することもできません。

それとは別に、IDEには違いがあります。VB6.0 IDEは比較してより強力です。一方、ホストアプリケーションはVBAに緊密に統合されています。アプリケーショングローバルオブジェクト( "ActiveDocument"など)とイベントは宣言なしで使用できるため、アプリケーション固有のプログラミングは簡単です。

それでも、Wordの起動、VBA IDEのロード、Wordとはまったく関係のない問題の解決を妨げるものは何もありません。VB 6.0が(技術的に)できることはあるかどうかはわかりませんが、VBAはできません。MSDNで比較シートを探しています。


7
microsoft.comページに簡潔な比較ページがないか、よく隠されているようです。もちろん、VBAに同梱されていないCOMオブジェクトを参照しない限り、VB 6.0のコードはVBAで変更されずに実行されると言えば十分です。
Tomalak

7
VBAとVb6は同じdllファイルを使用するため、コードはどちらでも実行されます。ただし、VBにはないVB6のPrinterオブジェクトのようなものがありますが、その理由はわかりません。それ以外の場合は、ベース言語に違いはないと思います。
ディックKusleika 2009年

46
これが、Officeドキュメントを開くことが実行可能ファイルを開くこととほぼ同じリスクを伴うことを付け加える価値があると思う理由です。
Oorang

13
VBには、Printersコレクションに加えて、Clipboard、Screen、およびAppオブジェクトもあります。フォームパッケージは完全に異なります。VBでウィンドウ化されたコントロールを回避する必要があるためですが、VBAではほとんどのコントロールがウィンドウレスであるため、hWnd指向のAPI呼び出しを使用するのははるかに困難です。また、コントロールについて言えば、VBで独自に作成して、VBAや他の場所で使用できます。他の多くの微笑-オブジェクトブラウザーを参照してください(IDEでF2を押します)。
カールE.ピーターソン

3
これは古いことに注意してください。VBAはVBA 7に更新され、64ビットのデータ型(LongLong、LongPtr)とその他の変更がサポートされています。VBはバージョン6でスタックしているため、これらの新機能はサポートされていません。この回答では、さらに多くの変更について説明します。つまり、VBでできないことは今やありますが、VBAではできます。
エリックA

47

VBAはVisual Basic for Applicationsの略であり、VBの小さな「アプリケーション用」スクリプト兄弟です。VBAは確かにExcelで利用できますが、他のオフィスアプリケーションでも利用できます。

VBを使用すると、VBAでは不可能なスタンドアロンのWindowsアプリケーションを作成できます。

ただし、開発者は、それらのアプリケーションを自動化するスクリプト言語として、独自のアプリケーションにVBAを「埋め込む」ことができます。

編集VBA FAQから:

Q. Visual Basic for Applicationsとは何ですか?

A. Microsoft Visual Basic for Applications(VBA)は、開発者がMicrosoft Visual Basicの全機能を使用してカスタムソリューションを構築できるように設計された組み込み可能なプログラミング環境です。VBAをホストするアプリケーションを使用する開発者は、アプリケーションの機能を自動化および拡張して、カスタムビジネスソリューションの開発サイクルを短縮できます。

VB.NETはVBとのみ構文を共有する別の言語であることに注意してください。


9
実際、マイクロソフトはVB.Netを「Visual Basic」と呼んでいます。msdn.microsoft.com/en-us/vbasic/default.aspxを参照してください
DOK、

19
はい。これが、Google経由でVBまたはVBA固有のヘルプを探すたびに髪の毛を抜いたくなるという事実です。愚かなマーケティングの決定。
Tomalak

8
@Tomalak:私はなぜだ著名 ;-)こと
fretje

2
@DOK:確かにそうですが、VB.NETが「私たちの開発者」がVB6以前として知っているVisual Basicとは別の言語であるという事実は変わりません。
fretje

4
@j_random_hackerこの場合、少なくともビジュアルスタジオのvbページに基づいて、MSはVB.NetをVBのバリアントとして扱うように感じられますが、これは正確ではありません。奇妙なことに、このwikiの記事は、MSビジュアルスタジオのページよりも顔に多くの情報を提供しています:) en.wikipedia.org/wiki/Visual_Basic_.NET。ただし、MSDNフォーラムの質問では、少なくとも違いについて触れています。social.msdn.microsoft.com
Forums

41

これは、古い質問に対するより技術的で完全な回答です。VisualBasic for Applications(VBA)とVisual Basic(pre.NET)は、類似した言語ではなく、同じ言語です。具体的には:

  • それらは同じ仕様を持っています。言語に含まれるものとその意味の実装に依存しない説明。ここで読むことができます:[MS-VBAL]:VBA言語仕様
  • これらのプラットフォームは同じです。どちらもMicrosoft P-Codeにコンパイルされます。これは、dll msvbvm [x.0] .dllに実装されているまったく同じ仮想マシンによって実行されます。

筆者(Paul Lomax)は、昨年出会っ古いVBリファレンスブックで、スタンドアロンアプリケーションでも、組み込みコンテキスト(MS Officeなど)でも、「VBA」は常に言語自体の名前であるとさえ主張しました。 ):

「先に進む前に、基本的なポイントを明確にしましょう。VisualBasic for Applications(VBA)は、Visual Basic(VB)でのプログラミングに使用される言語です。VB自体は開発環境であり、その環境の言語要素はVBAです。 」

小さな違い

ホスト型とスタンドアロン:実際には、ほとんどの人が「VBA」と言う場合、具体的には「MS Officeで使用されるVBA」を意味し、「VB6」は「スタンドアロンVBAの最新バージョンで使用されるVBA」を意味しますコンパイラ(つまり、Visual Studio 6)」。MS OfficeにバンドルされているIDEとコンパイラは、Visual Studio 6とほぼ同じですが、スタンドアロンのdllまたはexeファイルへのコンパイルは許可されないという制限があります。つまり、組み込みVBAプロジェクトで定義されたクラスは、登録できないため、非組み込みCOMコンシューマーからアクセスできません。

継続的な開発:Microsoftは、選択したプラットフォームとして.NETランタイムに切り替えたため、Visual Studio 6を使用したスタンドアロンVBAコンパイラーの作成を中止しました。ただし、MS Officeチームは引き続きVBAを維持しており、MS Office 2010以降、新しいVM(現在はVBA7.dllと呼ばれる)で新しいバージョン(VBA7)をリリースしています。大きな違いは、VBA7には32 64ビットバージョンで、特に外部API呼び出しに関して、2つの違いを処理するためのいくつかの拡張機能があります。


2
私はLomaxの本でも同じ引用を思い出しましたが、このフォーラムやウィキペディアなどで他のすべてのステートメントに反しているので、誰が正しいのか、なぜ不一致があるのか​​疑問に思います!Lomaxはまた、「VBAは、VBアプリケーションを作成するために使用する場合でも、WordまたはExcelでいくつかのタスクを自動化するために使用する場合でも同じ言語です。」と書いています(p。3)。また、「VBAはホスト言語であり、開発ツールのVBファミリの一部です。」
EJ Mak

1
VB6でヘルプを選択した場合は、VBA言語リファレンスを参照してください。Wordと同様に、VB6はVBA言語をホストします。アプリケーションオブジェクトはグローバルオブジェクトであるため(オートメーション標準)。VB6は、スタンドアロンプ​​ログラムに適したAppオブジェクトを提供します。Wordは、Wordマクロ用のAppオブジェクトを提供します。言語が同一であることに注意してください。不足しているものへの参照は、VB6プリンターオブジェクトなどの提供されたオブジェクトをホストすることです。これは言語の一部ではなく、ホストの一部です。
ACatInLove 2018

15

VBAをVB-Classic(VB6 ..)またはVB.NETと比較しますか?

VBA(Visual Basic for Applications)は、Microsoft Officeアプリケーションに組み込まれたvb-classicベースのスクリプト言語です。言語機能はVB5の機能と似ていると思います(いくつかの組み込み関数がないだけです)。

VBAスクリプトを記述したOfficeドキュメントにアクセスできるため、たとえば次のことができます。

  • マクロを書く(=事務作業で繰り返し発生するタスクを自動化するルーチン)
  • Excelセル式の新しい関数を定義する
  • オフィスデータの処理

例:Excelセルの値を設定する

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

VBCと-.NETはスクリプト言語ではありません。それらを使用して、VBAでは実行できない独立したIDEを使用してスタンドアロンアプリケーションを記述します(VBAスクリプトはOfficeに「存在する」だけです)。

VBAはVB.NETとは何の関係もありません(同様の構文です)。


11

実際、VBAはDLLのコンパイルに使用できます。Office 2000およびOffice XP Developerエディションには、COMアドインとして使用するDLLを作成するために使用できるVBAエディターが含まれていました。

この機能は、VSTO(VS Tools for Office)ソフトウェアの登場により、以降のバージョン(2003および2007)で削除されましたが、VSTO(またはVS.Net)を使用せずに、COMアドインを同じ方法で作成できることは明らかVB6 IDEを使用します。


10
この機能は削除されませんでした。Microsoftは、「Office XP Developer」をアップデートして、新しいバージョンをサポートしていません。あなたはまだ開発者をインストールすることができ、それは問題なく動作します。マイクロソフトではサポートされていません。これは、2003/2007に同梱されているVBAがXP / 2002と同じVBAバージョンであるためです。
AMissico

6

VBAです。VBAはVisual Basic for Applicationsを意味し、Officeドキュメントのマクロに使用されます。これはVB.NET機能にアクセスできないため、VB6の修正バージョンに似ており、ドキュメントで作業できるアドオン(VBA for Excelのワークシートなど)を備えています。


7
いいえ、VBAはVB5 / 6の修正版ではなく、サブセットです。VB5 / 6 IDEのオブジェクトブラウザーを見ると、使用および乱用するための完全なVBAオブジェクトライブラリが表示されます。とはいえ、VBAには(通常、必ずというわけではありませんが)デフォルトで読み込まれる追加のオブジェクトライブラリがあり、ホスト環境デュジャーナルに関連するデフォルトでグローバルオブジェクトを提供します。
カールE.ピーターソン

5

VBは言語ではありません。VBは、OfficeがVBAをホストするのと同じように、VBAをホストするプログラムです。VBは、WordやExcelと同様にAppオブジェクトのセットであり、Officeと同様にフォームパッケージです。

したがって、VBコードはVBでのみ記述できます。

PSこの情報は、VBのVB質問ページの[ 情報 ]タブにあります。

VBA情報から

VBA 6は1998年に出荷され、無数のライセンス済みホストが含まれています。その中には、Office 2000-2010、AutoCAD、PI Processbook、およびスタンドアロンのVisual Basic 6.0があります。


3
この答えは間違いです。VBAはVB6ではありません。これらは、多くの機能を共有する別個のエンティティです。その短い引用は何も証明していません。ホスト上で実行されるため、それが言語ではないと言うと、JavaScriptなどの言語を非言語に非難しますが、これは明らかに真実ではありません。また、VB6プログラムはスタンドアロンプ​​ログラムにコンパイルできるため、Windows以外のホストを必要としません。
エリックA

@ErikAいいえ、あなたは彼らが言っていることを誤解していません。VB6と同様にVBは、Officeアプリケーションと同様に、VBAを実行するホストアプリケーションです。VB6は、バイナリをリリースしてスタンドアロンを作成できるアプリケーションです。詳細を説明する上記の他の回答があります。
typedef Miles_Williams MILO

4

VBAはVisual Basic For Applicationsの略で、Officeスイートでの使用を目的としたVisual Basicの実装です。

それらの違いは、VBAがOfficeドキュメント(Officeの機能)内に埋め込まれていることです。VBは、アプリケーションを開発するためのアイデア/言語です。


1

VB(Visual Basicのみ6.0まで)は、VBA(Visual Basic for Applications)のスーパーセットです。他の人がこれを見逃していることは知っていますが、私の理解では、VBAのセマンティクス(つまり語彙)はVB6に含まれているため(Office製品に固有のオブジェクトを除く)、VBAはVB6のサブセットです。構文(つまり、単語が書き込まれる順序)は、VBAでもVB6の場合とまったく同じですが、VBAまたはVB6で使用できるオブジェクトは、目的が異なるため異なるのです。具体的には、VBAの目的は、MS Officeで実行できるタスクをプログラムで自動化することですが、VB6の目的は、スタンドアロンまたはMS OfficeやWindowsなどの他のプログラムで機能する標準EXE、ActiveXコントロール、ActiveX DLL、およびActiveX EXEを作成することです。


VB6はVBA言語をホストします。まったく同じです。ホストとしてのVB6は、Wordがホスティングするときに提供するように、特定のオブジェクトを提供します。
ACatInLove 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.