MOS VBAエキスパート対策
APIとOLEオートメーション

MOS Excel VBAエキスパート対策です
最終更新日:2019-03-16 APIとOLEオートメーション|MOS VBAエキスパート対策

MOS VBAエキスパート対策
APIとOLEオートメーション

MOS Excel VBAエキスパート対策です
最終更新日:2018-03-11

APIとOLEオートメーション


・OLEオートメーションの概念
・OLEオートメーションの使い方
・OLEオートメーションの注意点
・APIの概念
・APIの使い方



【ここでのポイント】

OLEオートメーションは、Excel以外のアプリケーションを操作するものなので、対象となるアプリケーションは多数あります。
また、
APIは、それこそ膨大に存在します、その数さえ不明なほど沢山あります。



Excel以外のアプリケーションやAPIの細部を問う問題は出しようがありませんし、それは既にVBAの範疇ではありません。
従って、この章の内容で出題されるのは、「概念」と「使い方」に絞られます。
試験対策としてはあまり重要視する必要はないと思います。

概念として覚えるのは、どのような仕組みで、どのような機能なのかということです。
使い方として覚えるのは、VBAの記述方法ということです。

覚えるべき項目としては
・参照設定
・CreateObject関数
・Declareステートメント
これだけ覚えれば十分です。


OLEオートメーションの概念

OLEはObject Linking and Embedding(オブジェクトのリンクと埋め込み)の略です。
アプリケーションから、別のアプリケーションを操作するための規格です。

つまり、
各アプリケーションに別のアプリケーションから操作・連携できる仕組みを用意しておき、
その仕組みを、他のアプリケーションが使う事でアプリケーション連携が出来るという事です。

簡単なイメージとしては、
Excelから、Word、PowerPoint、OutLook、InternetExplorerなどを操作するために用意された機能と考えて良いです。

OLEオートメーションで操作するオブジェクトはExcelではないので、
そのオブジェクトが用意しているプロパティ・メソッドを使って操作することになります。

注意
ExcelからOLEオートメーションでEXcelを操作するという事も可能です。
いま動作しているExcelアプリケーションとは別に、Excelアプリケーションを起動して操作するという事です。
さすがに、試験に出るとは思えませんが、
正否を問う選択肢の中に、
・ExcelからOLEオートメーションでEXcelを操作できる
このような文章が出ないとも限りませんので念のため。


OLEオートメーションの使い方

OLEオートメーションを利用する方法として、大きく2つの方法があります。

・事前バインディング
・実行時バインディング(遅延バインディングという言い方もある)

この2通りがあります。

事前バインディング
特定のオブジェクト型として宣言された変数に代入される場合、事前に(コンパイル時に)バインディングされます。
事前バインディングされたオブジェクトでは、アプリケーションが実行される前に、コンパイラによってメモリの割り当てとその他の最適化が実行されます。
ただし、外部オブジェクトの場合は参照設定が必要になります。

参照設定の方法
VBEの画面で、「ツール」→「参照設定」
ここで必要なオブジェクトにチェックを付けます。

非常に多くのライブラリがあります。
正式な名称を知らずに、その場で探すことは困難です。
事前に正式なライブラリ名称を調べておく必要があります。


実行時バインディング

Object 型として宣言された変数に代入される場合は、実行時にバインディングされます。
この型のオブジェクトは、任意のオブジェクトへの参照を保持できますが、事前バインディングされたオブジェクトの利点をほとんど持ちません。

VBA記述の違い

以下のVBAサンプルは、FileSystemObjectを利用する場合です。
FileSystemObjectは、ドライブ・フォルダ・ファイルなどを操作できるWindowsに用意されているオブジェクトです。

実行時バインディング
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
事前バインディング
「ツール」→「参照設定」で
「Microsoft Scripting Runtime」にチェックを付ける。

Dim objFSO As New FileSystemObject
または、
Dim objFSO As FileSystemObject
Set objFSO = New FileSystemObject


単純な見分け方としては、変数宣言の型が、

Objectが遅延バインディング
特定のオブジェクト型が事前バインディング


ということになります。


事前バインディングの利点

事前バインディングによって、コンパイラは、アプリケーションをより効率的にする重要な最適化を実行できます。
使用されているオブジェクトの種類が明確になるため、コードがより読みやすくなり、保守も簡単になります。
その他の利点として、自動コード補完機能が有効になり、プロパティ・メソッドの一覧を見る事が出来ます。

Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExist(strDir) Then
  MsgBox ("指定のフォルダは存在しません")
  Exit Sub
End If

上のコードには、スペルミスがあります。
探すのは困難ですね。

実行時バインディングの場合
実行時には、

MOS VBA エキスパート スタンダート編

MOS VBA エキスパート スタンダート編

実行時にバインディングしているので、実行してみないとエラーが分かりません。
事前バインディングの場合
実行時には、



MOS VBA エキスパート スタンダート編

もとより、事前バインディングの場合は、

MOS VBA エキスパート スタンダート編

このように入力候補がでるので、スペルミスはほとんどなくなります。


OLEオートメーションの注意点

OLEオートメーションを使う事で、Excel以外のアプリケーションを操作できることは、
VBAで実現可能な事が大幅に増えるという事です。

これはとても魅力的な事ですが、それに伴う難しさもあります。

Excelとは別のアプリケーションですので、
そもそも、そのアプリケーションがPCにインストールされていなければなりません。
当たり前のことですが、
OLEオートメーションでマクロを作成して動いているとしても、他のPCで動作するかどうかは別問題だという事です。
例えば、
OLEオートメーションでAccessを操作するマクロを作成したとして、
そのマクロを使うPCに、Accessがインストールされていなければ動作しないという事です。

また、
Excelとは別のアプリケーションなのですから、
そのアプリケーションの機能や、使えるプロパティ・メソッドは、アプリケーションごとに調べなければなりません。
そしてこれを調べる事は、Excelのプロパティ・メソッドを調べることに比べると時間を要するものになります。

さらに、
別のアプリケーションである以上、Excelとは全く別のタイミングでバージョンアップされてしまいます。
バージョンアップにより、今まで動いていたマクロが動かなくなることは、普通に起こり得ることです。


APIの概念

APIとは、アプリケーション プログラミング インターフェイス(Application Programming Interface)の略です。


一般的には、
ソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様になります。

APIは関数の集合体で、特定の機能を持つ1つまたは複数のDLLで構成されています。

DLLは、Dynamic Link Libraryの略で、
他のアプリケーションで使える機能や各機能にアクセスする関数が入っていて、VBA等から呼び出せるようにしてあるものです。

VBAで単にAPIと言う場合は、Windows APIを指す場合がほとんどです。

Windows APIは、
WindowsのOSにあらかじめ用意されている各種の機能を呼び出す手段として用意されているものです。


APIの使い方

APIを使用するには、Declareステートメントで宣言が必要です。


Declare ステートメント

ダイナミック リンク ライブラリ (DLL) の外部プロシージャへの参照を宣言します。

モジュール レベルで宣言します。

引数はAPIごとに違うため、使いたいAPIのサンプルや専門書を見るしかありません。

Excel 64Bit版の場合
PtrSafe キーワードが必要になります。

ネット等のサンプルのほとんどは32Bit版ですので、適宜PtrSafeキーワードを追加します。

また、
アドレス参照(ポインターおよびハンドルを格納する場合) の引数は、
32Bit版では、Long型ですが、
64Bit版では、LongPtr型 または Longlong型になります。

Excel2010以降では、32BitでもPtrSafe キーワードを入れることができます。
つまり、2010以降でしか使わないのであれば、
PtrSafe キーワードは必ず入れておけば良いことになります。


使用例.

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'64bit版のExcelの場合は、以下のようにPtrSafeを付けて下さい。
'Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub untilReady(objIE As Object)
  Dim starttime As Date
  starttime = Now()
  Do While objIE.Busy = True Or objIE.ReadyState <> READYSTATE_COMPLETE
    Sleep 100
    DoEvents
    If Now() > DateAdd("S", 10, starttime) Then
      Exit Do
    End If
  Loop
End Sub

Sleepはプログラムを任意の時間だけ待機させることができ ます。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
これで定義し、

Sleep 100
これで、100ミリ秒待機させています。


【業務改善の実務】

OLEオートメーションは、
同じMicrosoft Office製品であれば、ネットの情報も豊富ですし、書籍も多数あります。
Office製品以外をOLEオートメーションで操作する場合は細心の注意が必要です。
資料の入手だけでも結構苦労する場合が多く、開発に多大な時間を要します。

Windows APIは、EXcelVBAだけでは実現できないWindowsの機能を使いたい場合には必要不可欠なものです。
しかし利用する時には、よくよく検討してからにしましょう。
・その機能は、本当にVBAだけでは実現できないのか
・そもそも、そんな機能が本当に必要なのか
ちょっとした体裁の為にわざわざWindows APIを使う事は、時に自己満足でしかない場合もあります。

以上の事を分かった上で、正しく使うのであれば、
VBAで実現できる事が大幅に増え、今まで出来なかったことができるようになります。
実際に使うかどうかは、その時々で判断するとして、いつでも使えるように最低限の事は覚えておきましょう。


【本サイト内の関連ページ】

第123回.APIについて(Win32API)
一般的にはAPIは、アプリケーションプログラミングインタフェースのことです、ソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様です。ここでは、Windows標準のWin32APIについて解説します。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
全シートの画面キャプチャを取得する(keybd_event)
資料等の作成で、画面キャプチャすることがあると思います。そこで、全シートの画面キャプチャを、新規シートに全て取得するプログラムです。ExcelマクロVBAの実用サンプル、エクセルVBA集と解説

事前バインディングと遅延バインディング(実行時バインディング)
オブジェクトがオブジェクト変数に代入されるとき、事前バインディングと遅延バインディング(実行時バインディング)の2通りがあります。バインディングとは バインディングはbindingで、縛るとか束ねると言う意味の英単語です。ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説

Dictionary(ディクショナリー)連想配列の使い方について
エクセル掲示板で、Dictionaryオブジェクトについて簡単な使用例を上げて解説して欲しいです。検討お願いしますm(_ _)m と頂いたので、分かる範囲内で解説します。ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
Dictionary(ディクショナリー)のパフォーマンスについて
Dictionary(ディクショナリー)は辞書機能です、この辞書は、重複は許されず、キーとデータの2つが存在します、今回はこのDictionaryのパフォーマンス(処理速度を)を検証します。Dictionaryの基本的な使い方については、Dictionary(ディクショ,VBAの問題点と解決策
VBAでのInternetExplorer自動操作
VBAでInternetExplorerを操作したくなることがあります。Webのデータを取得したり、リンクをクリックしたりと、これらを自動で行う事が出来ます。ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
VBAでのSQLの基礎(SQL:Structured Query Language)
SQL(StructuredQueryLanguage:構造化問い合わせ言語)は、データベースの定義や表の操作を行う言語です。データ定義言語であるDDL(datadescriptionlanguage)と データ操作言語であるDML(datamanipulationl,VBAの問題点と解決策
VBAで正規表現を利用する(RegExp)
正規表現は複雑なパターンマッチングとテキストの検索置換するためのツールです、VBAで正規表現を使う場合はRegExpオブジェクトを使用します、RegExpは、VBScriptに正規表現が用意されているオブジェクトです。メタ文字 メタ文字の一覧です。ExcelマクロVBAの問題点と解決策
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
VBAでメール送信する方法はいろいろありますが、ここでは、CDO(MicrosoftCollaborationDataObjects)を使っての送信方法を解説します。メール送信は、メーラーを使う方法や、フリーのDLLを使う方法等もありますが、まずは
VBAでのOutlook自動操作
エクセルでメールの送受信する方法はいくつかありますが、なかなか面倒ですし、サポートされない機能(CDOは送信のみ)があったりと、不便な事が多いです。そこで、Excelを使っていると言う事は、大抵はOutlookもインストールされているはずですので、これを使って
ADO(ActiveX Data Objects)の使い方の要点
ADOはMicrosoftが提供するデータベースアクセスのためのソフトウェア部品です、OLEDBをActiveXコントロールの形で使えるようにしたプログラミングインターフェースになります、ここでは、ADOを使用したデータベースへの接続方法を解説します。ExcelマクロVBAの問題点と解決策

Excelの表をPowerPointへ図として貼り付け
PowerPointを作っていると、エクセルの表を挿入したいことが多いです、単発作業なら手作業で十分ですが、定期的にやる場合や、数が多いと大変ですので、マクロで自動化したくなります。Subsample() DimppAppAsNewPowerPoint.Applica,VBAの実用サンプル





同じテーマ「MOS VBAエキスパート対策」の記事

プロシージャ
イベント
ステートメント(スタンダード)
関数
エラーへの対処
APIとOLEオートメーション
変数と配列
レジストリの操作
ファイルの操作
ユーザーフォームとメニューの操作
VBAスタンダード試験対策まとめ

新着記事NEW ・・・新着記事一覧を見る

エクセルの日付と時刻のまとめ|エクセル関数超技(3月6日)
Excelシートの複雑な計算式を解析するVBA|VBAサンプル集(2月18日)
VBAクラスの作り方:独自Rangeっぽいものを作ってみた|VBA技術解説(2月16日)
VBAクラスの作り方:列名のプロパティを自動作成する|VBA技術解説(2月14日)
VBAクラスの作り方:列名の入力支援と列移動対応|VBA技術解説(2月11日)
クラスを使って他ブックのイベントを補足する|VBA技術解説(2月6日)
Excelアドインの作成と登録について|VBA技術解説(2月3日)
参照設定、CreateObject、オブジェクト式の一覧|VBA技術解説(1月20日)
VBAでファイルを規定のアプリで開く方法|VBA技術解説(1月20日)
ドキュメントプロパティ(BuiltinDocumentProperties,CustomDocumentProperties)|VBA技術解説(1月19日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.マクロって何?VBAって何?|ExcelマクロVBA入門
7.とにかく書いて見よう(Sub,End Sub)|VBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.セルに文字を入れるとは(Range,Value)|VBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • APIとOLEオートメーション

    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。






    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ