web-dev-qa-db-ja.com

VBA VS. VSTO違いは何ですか、アップグレードする必要がありますか?

私はKISSの原則(シンプルに保つ)とExcelユーザー向けの長年のVBAの大ファンです。ただし、VBAとVSTO(Visual Studio Tools for Office)で見つけることができるすべての記事)非常に複雑に見えます。

まず、Excelに組み込まれている非常に貧弱なIDEにうんざりしていて、新しいものを探しています。VisualStudioをIDEとして使用しているVSTOは唯一の選択肢。

それで、私はVBAとVSTOの違いを理解して、VSTOの使い方を学ぶ価値があるかどうかを知りたいと思っています。

22
user2155507

どのツールセットを使用するかは、主に個人的な好みの問題ですが、考慮すべき点がいくつかあります。
1。パフォーマンス:ほとんどのExcel関連タスクでは、相互運用レイヤーが追加されているため、VSTOはVBAと比較して非常に低速で実行されます。
2。 UDF:VSTOはUDFをサポートしていません
3。オブジェクトモデル:ヒントを提供する.NETマクロレコーダーがないため、VBAよりもVSTOでExcelオブジェクトモデルを操作するのは困難です。
4。 IDE:VSTOを使用すると、最新のVisual StudioにアクセスできますIDE(Visual Studioライセンスを持っている場合)
5。 .Net Framework:VSTOを使用すると、非常にリッチで強力な.NETFrameworkにアクセスできます。
6。学習曲線:VB.NETはVBAとは異なる言語であり、.NETフレームワークとオブジェクトモデルの違いは、移行がそれほど単純ではないことを意味します。
7。 Visual Studio/.NETルートを使用する場合は、VSTOではなくAddinExpressまたはXLDNAを使用することをお勧めします。どちらもVSTOよりも制限が少ないです。

18

ExcelのVBAには、コードの編集と実行の間に高速な結果が得られるという利点があります。あなたは優れたVBAプログラマーなので、Visual Studioのスーパー機能(インテリセンス、try-catch-fanally、継承、すべての.NETオブジェクト、マルチスレッドなど)がなくても生活できます。

VSTOは、非常に優れたIDE(Visual Studio)内で作業する方法ですが、VB.NETとExcelの切り替えに多くの時間を浪費することになると思います。それほど直接的ではありません。 Excel内のVBAとして。

プログラミングの主な目的がExcelファイル内にとどまることである場合は、VBAを使用してください。本当にExcelファイルの外部で作業する必要がある場合、またはExcelファイルに依存する必要のないことを実行したい場合は、VSTOを検討できます。その上、VSTOはかなり新しく、ドキュメントは完全ではないかもしれません。

もし私があなたなら、私はVBAにとどまります。これIS私の謙虚な意見。VBAとVB.NET(VSTO)の比較を少し書きました:ここに VB.NETとVBAの違い

12
Check-Kay Wong

この質問が最初に出されてから6年になるので、OPの時点で、これら2つのツールの比較が異なっていた可能性がありますが、実際には、既存の回答がVBAに対してどれほど有利であるかに非常に驚いています。

VBAは解釈され、完全にアプリケーション内に格納されます。ここでの利点は次のとおりです。

  • コーディングはアプリケーション内で直接実行でき、外部ツールは必要ありません
  • マクロ記録などのアプリケーション固有の機能により、ラピッドプロトタイピングが可能になります
  • RefEditなどのExcel固有のActiveXコントロールを活用できます
  • UDFは簡単に開発できます
  • アドインはドキュメントとして配布されます(.xla形式)

小さなアプリケーションとUDFの場合、VBAは機能しますfine。 Excelですばやく簡単にビルドでき、物事は「正しく機能」します。

ただし、プログラムに何らかの複雑さが含まれている場合は、VSTOを調べる価値があります。そこにある利点は次のとおりです。

  • VB.NETやC#などのマルチパラダイムプログラミング言語を使用する機能
  • より良いコレクションサポート(ジェネリックリスト、辞書、タプルなど...)
  • スレッドのサポート、非同期実行
  • スタンドアロンアプリケーションとしてのアドインの展開
  • ネイティブWinFormsを使用し、ノンブロッキングUIを開発する機能

VSTOはこの時点でかなりよく文書化されています:

https://docs.Microsoft.com/en-us/visualstudio/vsto/create-vsto-add-ins-for-office-by-using-visual-studio

パフォーマンスのトピックはかなりあいまいですが、以前の回答のいくつかとは対照的に、これは実際にはボトルネックに依存します。 COMの相互運用性によりオーバーヘッドが増える可能性がありますが、同時にVBA実行モデルはC#で提供できるモデルよりもはるかに低速です。特に、VSTOのプログラミングが3つ提供できるさまざまなパラダイムを考慮すると、VSTOが同様にコーディングされたVBAプログラムよりも桁違いに高速になるアプリケーションがあります。

2
Will Ayd

VBAに対するあなたの回答には非常に驚いています。

数年間(主にOutlookで)VBAを使用していたので、さまざまなネガティブな側面に飽きてしまいました。VSTOの方がはるかに効率的であるため、移行します。

私は多くの否定的な点に直面しました:

開発中

  • Vba IDEは非常に限られています、
  • ユーザーフォームは制限されています(リッチテキストボックスを作成してみてください)

展開

  • ユーザーはあまりにも多くのアクションを実行する必要があります(セキュリティ設定の変更、参照のインポート、リボンの変更...)

更新中

  • 自動的に更新することはできません。更新ごとに新しいファイルをユーザーに送信する必要があります。

アドインははるかに強力であり(強力なことは、複雑なものを作成するのが簡単であることを意味します)、機能を引き出すためにリボンにボタンを追加でき、展開がより簡単です(ClickOnceを見てください)。

一般に、VBAマクロは個人的な使用のために作成されますが、VSTOアプリケーションは、ここで読むことができるように配布されるように作成されます。

https://support.Microsoft.com/en-us/help/290779/managing-and-distributing-Outlook-visual-basic-for-vba

複数の人に配布する予定のソリューションを開発している場合は、VBAコードをOutlook COMまたはVSTOアドイン、またはOutlook用のOfficeアドインに変換する必要があります。

0
Eñaut