GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBAを極める−VBAスーパーテクニック
  ActiveXオートメーション(OLEオートメーション)を利用しよう!
 
■ ActiveXオートメーション(OLEオートメーション)の概要

ActiveXオートメーションを使用すると、ExcelやAccessのようにActiveXオートメーション機能をサポートしているアプリケーションのオブジェクトを一時的に作成し、利用することが可能になります。

ActiveXオートメーションは、他のアプリケーションに対して自身のオブジェクトへの参照を公開し、オートメーションクライアント機能に対応したアプリケーションと、データ連携を可能にするためのインターフェイスを提供します。
このとき、外部公開されるオブジェクトモデルをオートメーションサーバー(オートメーションオブジェクト)と呼び、それを制御するクライアントをオートメーションクライアント(オートメーションコントローラー)と呼びます。

ActiveXオートメーションは、このオートメーションクライアントからオートメーションサーバーを操作し、異なるアプリケーション間でデータを共有させ、利用する技術のことを指します。
これを利用することで、AccessからExcelのグラフを利用したり、ExcelからWordの文書を編集したりすることが可能になります。

Officeでシステム開発をする上で、最もその恩恵にあずかることができるのがこのオートメーション機能の利用でしょう。Excelだけですべてを行うのではなく、Officeを巨大なアプリケーション群と捉えて開発を行うメリットが得られるはずです。

CreateObject 指定した種類の新しいオブジェクトを一時的に作成する

指定したActiveXオブジェクトへの参照を作成します。戻り値をオブジェクト変数に代入することで、そのオブジェクトに対する操作を行うことができます。

書式:CreateObject(class,[servername])
 
class 作成するオブジェクトのアプリケーションの名前とクラスを[アプリケーションの名前.オブジェクトの種類またはクラス]で指定します。
servername 作成するオブジェクトを保存するネットワークサーバーの名前を指定します。ローカルマシンで使用する場合は、空の文字列を指定するか省略します。

CreateObjectを利用したいろいろな例を紹介します。
 
(例)
  Sub test()
  Dim xlApp As Object
  Dim xlWkb As Object
  Dim xlWks As Object
    Set xlApp = CreateObject("Excel.Application")
    Set xlWkb = xlApp.Workbooks.Add
    Set xlWks = xlWkb.worksheets(1)
      xlApp.Visible = True
      xlWks.Cells(1, 1) = "ActiveX Automation Test"
      xlWkb.SaveAs CurrentProject.Path & "\test.xls"
      xlApp.Quit
    Set xlApp = Nothing
    Set xlWkb = Nothing
    Set xlWks = Nothing
  End Sub
 
AceessVBAからこのプロシージャを実行した場合、新しいExcelワークブックを作成し、A1セルに"ActiveX Automation Test"と入力したあと、実行したmdbファイルと同じ場所に保存し、Excelを終了します。また次のように記述することもできます。

  Sub test()
  Dim xlSht As Object
    Set xlSht = CreateObject("Excel.Sheet")
      xlSht.Application.Visible = True
      xlSht.ActiveSheet.Cells(1, 1) = "ActiveX Automation Test"
      xlSht.SaveAs CurrentProject.Path & "\test.xls"
      xlSht.Application.Quit
    Set xlSht = Nothing
   End Sub

このように記述しても、先ほどのプロシージャと同じ動作をします。

(例)
  Sub test()
  Dim ieApp As Object
  Const URL As String = "http://home.att.ne.jp/zeta/gen/excel/"
    Set ieApp = CreateObject("InternetExplorer.Application")
      ieApp.Navigate URL
      ieApp.Visible = True
    Set ieApp = Nothing
  End Sub

Access、Excel等からこのプロシージャを実行した場合、InternetExplorerを起動しエクセル大事典のサイトを表示します。

(例)
  Sub test()
  Dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      xlApp.Workbooks.Open FileName:=CurrentProject.Path & "\test.xls"
      xlApp.Run "testExcelProc"
    Set xlApp = Nothing
  End Sub

  Sub test()
  Dim acApp As Object
    Set acApp = CreateObject("Access.Application")
      acApp.OpenCurrentDatabase ThisWorkbook.Path & "\test.mdb"
      acApp.Visible = True
      acApp.Run "testAccessProc", "Arg1", "Arg2"
    Set acApp = Nothing
  End Sub

上の例では、AccessVBAからExcelワークブックを開きマクロを実行させます。呼び出し側のMDBファイルと同一フォルダにあるtest.xlsを開き、その中にある"testExcelProc"プロシージャを実行させます。
下の例では、ExcelVBAからAccessのMDBファイルを開きマクロを実行させます。呼び出し側のワークブックと同一フォルダにあるtest.mdbを開き、その中にある"testAccessProc"プロシージャに"Arg1"を第1引数、"Arg2"を第2引数として渡し実行させます。

代表的なオートメーションサーバーに指定できるアプリケーション名とクラス、オブジェクトの種類
アプリケーション クラス オブジェクトの種類
エクセル Excel.Application Excel本体
エクセル Excel.Sheet Excelシート
エクセル Excel.Chart Excelグラフ
ワード Word.Application Word本体
ワード Word.Document Word文書
アクセス Access.Application Access本体
パワーポイント PowerPoint.Application PowerPoint本体
IE InternetExplorer.Application InternetExplorer本体
アウトルック Outlook.Application Outlook本体

GetObject ファイルからオブジェクトへの参照を取得する

作成済みのファイルを使用してオブジェクトへの参照を取得します。戻り値をオブジェクト変数に代入することで、そのファイルに対する操作を行うことができます。

書式:GetObject([pathname] [, class])

pathname 取得するオブジェクトが含まれているファイルの絶対パスとファイル名を指定します。ここで指定されたファイルに関連付けられているアプリケーションが起動され、オブジェクトがアクティブになります。引数pathnameに空文字列を指定するとclassに指定されたオブジェクトを新規作成します。その場合、必ずclassを指定する必要があります。
class オブジェクトのクラスを表す文字列を指定します。

(例)
  Sub test()
  Dim xlApp As Object
    Set xlApp = GetObject(CurrentProject.Path & "\test.xls")
      xlApp.Application.Visible = True
      xlApp.Parent.Windows(1).Visible = True
    Set xlApp = Nothing
  End Sub

AceessVBAからこのプロシージャを実行した場合、呼び出し側のMDBファイルと同一フォルダにあるtest.xlsを開きます。
GetObject(CurrentProject.Path & "\test.xls")の部分をGetObject("", "Excel.Sheet")にした場合、新規のワークブックとして開きます。

事前バインディングと実行時バインディング(遅延バインディング)

上記のサンプルコードは、すべて実行時にバインディングを行う総称オブジェクト型の変数(Objectキーワード)としてオブジェクト変数を宣言していました。この場合、オブジェクト変数がどのアプリケーションのオブジェクトなのかはコード実行時にはじめて解釈されるため、オーバーヘッドが生じてコードの実行速度が落ちます。

これに対して、コードを実行する前にあらかじめ外部オブジェクトに対する参照を設定する事前バインディングを行うことが可能です。

例えば、参照設定でMicrosoft Word 9.0 Object Libraryにチェックを入れると、コンパイラはコードが実行される前にWord2000オブジェクトライブラリ(.OLB)を使用するためのメモリの割り当てと最適化処理を行います。これによって実行時バインディング(遅延バインディング)に比べて高速な処理を行うことが可能になります。

また事前バインディングでは、自動コード補完や自動メンバ表示といったコーディング支援機能が有効になり、コンパイルエラーも返すためプログラミングの省力化につながります。

(例)
  Dim wrdApp As Word.Application
  Set wrdApp = CreateObject("Word.Application")

この例では、Objectキーワードを使用せず、固有オブジェクト型で変数を宣言し事前バインディングしています。Microsoft Word 9.0 Object Libraryを参照設定する必要があります。
次のように記述することも可能です。

(例)
  Dim wrdApp As New Word.Application

この場合、Newキーワードを用いることでCreateObject関数を使わずに事前バインディングを行っています。



OLEオートメーションとActiveXオートメーション

OLE(Object Linking and Embedding)は、Windows 3.1の時代に採用されたアプリケーション間連携を行う機能です。本来、別のアプリケーションを利用して作られたデータ(オブジェクト)を利用するためにサポートされた機能だったのですが、その後機能を大幅に強化し、OLEはコンポーネント技術そのものを表す用語になっていきました。1996年初頭にMicrosoftはOLEの中でインターネットに関連するいくつかの技術をActiveXとして名称変更しました。その後、OLEとして公開されていた技術は順次ActiveXに統合されていきました。

オートメーションは文字通り"自動化"を表します。ActiveX(OLE)の機能を利用して他のアプリケーションの機能を利用したり、自分の機能を他のアプリケーションに公開したり、データをアプリケーション間で相互利用できるようにする技術をActiveX(OLE)オートメーションと呼びます。

当サイトでは、OLEオートメーションとActiveXオートメーションを区別しません。従来のOLEオートメーションをActiveXオートメーションまたは単にオートメーションとして紹介しています。


VBAとActiveXオートメーションを組み合わせることで、大規模なシステム開発がぐんと身近なものになります。皆さんのシステム開発にも、ぜひオートメーションを採用してください。
Excel VBAだけではできなかった、多くのことが可能になるはずです。
 

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,