.NETFrameworkの使用

Top / Coding / VBA / .NETFrameworkの使用
 

ページ構成
−Top
  • −Coding
    • +.NET
    • +CUDA
    • +JavaScript
    • +MSOffice
    • +PHP
    • +PowerShell
    • +Python
    • +Ruby
    • −VBA
      • ・.NETFrameworkの使用
      • ・COMコンポーネントの使用
      • ・Closeメソッド
      • +Excel
      • ・FileSystemObject
      • ・Framework
      • ・GitHubで公開されているコード一覧
      • +IEの操作
      • ・INIファイルの読み書き
      • ・MACアドレスの取得
      • +Outlook
      • ・PowerPoint
      • +SelenuimVBA
      • ・SendKeys、SendInput
      • ・TemplateEngine
      • ・VBA7
      • +Word
      • ・Word参考記事
      • ・ウィンドウをアクティブに
      • ・オートコレクト
      • ・クリップボードの操作
      • ・タスクの終了
      • ・ドキュメント自動生成
      • ・ハッシュを求める
      • ・ヒアドキュメントの実現
      • ・メールの作成
      • +ユニットテスト
      • ・一歩前へ
      • ・開発者
      • ・公開されているクラス一覧
      • ・人に説明するとき用のメモ
      • ・正規表現
    • +misc
    • +画像処理
  • +Server
  • +memo
  • +misc
  • +カメラ
  • +科学技術
  • +記事
  • +数値解析
最新の10件
2018-01-16 更新
  • misc/Hardware/各種プロセッサの倍精度演算性能
2017-11-27 更新
  • Coding/misc/raspberrypi
2017-11-02 更新
  • Coding/.NET/NuGetパッケージの作成
2017-10-19 更新
  • Coding/MSOffice/VSTO/ThisAddin_Startupに処理を書く問題が起きる
2017-06-16 更新
  • Coding/.NET/VisualStudioビルドイベント
2017-05-28 更新
  • misc/Hardware/タブレット向けCPU/複製
2017-05-25 更新
  • Coding/Python/CloudVision
2017-05-24 更新
  • misc/ロードバイク/サイクルロード/奈良
2017-05-11 更新
  • misc/ソフトウェア/文章/文章校正、作成支援ツール
2017-03-15 更新
  • misc/ソフトウェア/プロジェクト管理ツール

Powered By

b_pukiwiki.official.png

edit

目次

  • このページの概要
  • 利用にあたっての概略
    • 余談: COM interopとは
    • 制限: 呼び出せる.NET Frameworkのクラスについて
      • 呼び出せて、かつ、実用性が0ではないクラス
      • 使い方やノウハウ
      • 他、利用例
  • 参考資料
    • Microsoft公式資料
  • 所感
    • 結論:実用にならない。
    • 代替案:.NET Frameworkを利用したい場合
      • さらに余談

このページの概要 †

VBAから.NET Frameworkを利用する方法について調べた。

↑

利用にあたっての概略 †

VBAから 自動生成されたCOM interopアセンブリを介することで
.NET Framewrokの一部のクラスを呼び出すことができる。
ただし、どんなクラスでも呼び出せるわけではない。制限については後述。

COM interopアセンブリは、COMコンポーネントを呼び出す方法と同じようにして利用が可能。
具体的には、CreateObjectやGetObjectを使って呼び出す

↑

余談: COM interopとは †

COM interopは、既存のCOMコンポーネントを改変することなく、アクセスできるようにするための後方互換性を提供する。
また、COM interopは、COM開発者が、COMオブジェクトにアクセスする方法と同じ要領で、マネージドコードにアクセスすることを可能にする。
具体的な実装の話などは下記Microsoft公式資料を参照。
参考:COM Interop Tutorials (C#)

思いっきり端折ると、COM interopは、マネージドコードをあたかもCOMオブジェクトのように扱えるようにするためのもの。
.NET FrameworkのCOM interopは自動生成される。

↑

制限: 呼び出せる.NET Frameworkのクラスについて †

  • 引数をもたないコンストラクタが存在する必要がある。
    • VBAは言語仕様上、コンストラクタに引数を与えられないため、
       引数をとるコンストラクタしか存在しないクラスは呼び出す術がない。
  • Private、Protected、Staticメソッドは使用できない。
    • これらのメソッドはVBAから見えない
  • オーバーロードされたメソッドは、個別に _1, _2のような接尾語付きの名前で呼び出すことになる。
    • メソッドの命名に関してはILレベルで決定されており、ぱっと分かるような資料もないため、目的の引数を取るメソッド名を調べるには手間がかかることに注意

なお、上記制限があるため、COM から呼び出し可能な.NET Framework のクラスとメンバは非常に少ない。
というのも、.NET Framework クラス ライブラリのクラスの多くが「引数をとるコンストラクタ」を使用し、
数少ない「引数なしのコンストラクタ」を備えたクラスはパブリック インスタンス (Public Instance) のメンバをほとんど所有しないため。

↑

呼び出せて、かつ、実用性が0ではないクラス †

  • Collection関連
    • ArrayList, Hashtable, Queue, SortedList, Stack
  • IO関連
    • MemoryStream
  • Serialization関連
    • System.Runtime.Serialization.FormatterConverter
  • Cryptography関連
    • System.Security.Cryptography名前空間の各種暗号/複合を扱うクラス
    • 参考:System.Security.Cryptography 名前空間
  • Text関連
    • StringBuilder
↑

使い方やノウハウ †

下記ドキュメントを熟読すると◎。
試行錯誤の過程から、実際に使ってみての感想まで全て詳細にまとめられています。

  • 開発リソース/JScript/スクリプトから.Net Frameworkクラスを利用する(ネタ) - isla-plata.org Wiki
  • 開発リソース/JScript/スクリプトから.Net Frameworkクラスを利用する(ノウハウ編) - isla-plata.org Wiki
↑

他、利用例 †

  • トキドキドキンドットコム » Blog Archive » VBAで.NET FrameworkのArrayListクラスとRandomクラスを使う
↑

参考資料 †

↑

Microsoft公式資料 †

  • Microsoft Office と .NET の相互運用性
    • http://msdn.microsoft.com/ja-jp/library/dd313957.aspx
↑

所感 †

↑

結論:実用にならない。 †

“.NET Frameworkでできること >> VBAでできること”であり、
VBA側から見ると、.NET Frameworkの多くのクラスが無力化する。

また、VBAから.NET Frameworkに渡せる型がstring と intくらいなので
まともに引数や戻り値のやりとりをすることも難しく、
ただでさえ無力化された.NET Frameworkのクラスがゴミと化す。

↑

代替案:.NET Frameworkを利用したい場合 †

MS Officeで、.NET Frameworkの機能を利用したい場合には、

  • .NET Frameworkで作成した自作ライブラリを、VBAから呼び出せるようにする
    • 参考:Microsoft Office で Visual Basic for Applications から Visual Basic .NET クラス ライブラリを呼び出す方法
  • そもそもVBAを利用することをやめて、VSTOでアドインを作成する

のいずれかがおすすめです。

個人的には、後者(VSTO)であれば、フルに.NET Framework言語(C#)で記述できるため
VisualStudioの生産性の高さや保守性の良さといったメリットを最大限享受できて使い勝手が良いです。

↑

さらに余談 †

VSTO内のメンバを、VBAから呼び出すことも可能のようです。
参考: チュートリアル : VSTO アドインのコードを VBA から呼び出す


トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS
Last-modified: 2015-11-22 (日) (1188d)
Site admin: D*isuke YAMAKAWA

PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji. Powered by PHP 5.3.29. HTML convert time: 0.027 sec.