APIとOLEオートメーション
・OLEオートメーションの概念
・OLEオートメーションの使い方
・OLEオートメーションの注意点
・APIの概念
・APIの使い方
【ここでのポイント】
また、
APIは、それこそ膨大に存在します、その数さえ不明なほど沢山あります。
従って、この章の内容で出題されるのは、「概念」と「使い方」に絞られます。
試験対策としてはあまり重要視する必要はないと思います。
使い方として覚えるのは、VBAの記述方法ということです。
・参照設定
・CreateObject関数
・Declareステートメント
これだけ覚えれば十分です。
OLEオートメーションの概念
アプリケーションから、別のアプリケーションを操作するための規格です。
各アプリケーションに別のアプリケーションから操作・連携できる仕組みを用意しておき、
その仕組みを、他のアプリケーションが使う事でアプリケーション連携が出来るという事です。
Excelから、Word、PowerPoint、OutLook、InternetExplorerなどを操作するために用意された機能と考えて良いです。
そのオブジェクトが用意しているプロパティ・メソッドを使って操作することになります。
いま動作しているExcelアプリケーションとは別に、Excelアプリケーションを起動して操作するという事です。
さすがに、試験に出るとは思えませんが、
正否を問う選択肢の中に、
・ExcelからOLEオートメーションでEXcelを操作できる
このような文章が出ないとも限りませんので念のため。
OLEオートメーションの使い方
・実行時バインディング(遅延バインディングという言い方もある)
事前バインディングされたオブジェクトでは、アプリケーションが実行される前に、コンパイラによってメモリの割り当てとその他の最適化が実行されます。
ただし、外部オブジェクトの場合は参照設定が必要になります。
ここで必要なオブジェクトにチェックを付けます。
正式な名称を知らずに、その場で探すことは困難です。
事前に正式なライブラリ名称を調べておく必要があります。
実行時バインディング
この型のオブジェクトは、任意のオブジェクトへの参照を保持できますが、事前バインディングされたオブジェクトの利点をほとんど持ちません。
VBA記述の違い
FileSystemObjectは、ドライブ・フォルダ・ファイルなどを操作できるWindowsに用意されているオブジェクトです。
Set objFSO = CreateObject("Scripting.FileSystemObject")
「Microsoft Scripting Runtime」にチェックを付ける。
または、
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
上のコードには、スペルミスがあります。
探すのは困難ですね。
OLEオートメーションの注意点
VBAで実現可能な事が大幅に増えるという事です。
そもそも、そのアプリケーションがPCにインストールされていなければなりません。
当たり前のことですが、
OLEオートメーションでマクロを作成して動いているとしても、他のPCで動作するかどうかは別問題だという事です。
例えば、
OLEオートメーションでAccessを操作するマクロを作成したとして、
そのマクロを使うPCに、Accessがインストールされていなければ動作しないという事です。
Excelとは別のアプリケーションなのですから、
そのアプリケーションの機能や、使えるプロパティ・メソッドは、アプリケーションごとに調べなければなりません。
そしてこれを調べる事は、Excelのプロパティ・メソッドを調べることに比べると時間を要するものになります。
別のアプリケーションである以上、Excelとは全く別のタイミングでバージョンアップされてしまいます。
バージョンアップにより、今まで動いていたマクロが動かなくなることは、普通に起こり得ることです。
APIの概念
APIとは、アプリケーション プログラミング インターフェイス(Application Programming Interface)の略です。
ソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様になります。
他のアプリケーションで使える機能や各機能にアクセスする関数が入っていて、VBA等から呼び出せるようにしてあるものです。
WindowsのOSにあらかじめ用意されている各種の機能を呼び出す手段として用意されているものです。
APIの使い方
APIを使用するには、Declareステートメントで宣言が必要です。
アドレス参照(ポインターおよびハンドルを格納する場合) の引数は、
32Bit版では、Long型ですが、
64Bit版では、LongPtr型 または Longlong型になります。
つまり、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はプログラムを任意の時間だけ待機させることができ ます。
これで定義し、
これで、100ミリ秒待機させています。
【業務改善の実務】
同じMicrosoft Office製品であれば、ネットの情報も豊富ですし、書籍も多数あります。
Office製品以外をOLEオートメーションで操作する場合は細心の注意が必要です。
資料の入手だけでも結構苦労する場合が多く、開発に多大な時間を要します。
しかし利用する時には、よくよく検討してからにしましょう。
・その機能は、本当にVBAだけでは実現できないのか
・そもそも、そんな機能が本当に必要なのか
ちょっとした体裁の為にわざわざWindows APIを使う事は、時に自己満足でしかない場合もあります。
VBAで実現できる事が大幅に増え、今まで出来なかったことができるようになります。
実際に使うかどうかは、その時々で判断するとして、いつでも使えるように最低限の事は覚えておきましょう。
【本サイト内の関連ページ】
事前バインディングと遅延バインディング(実行時バインディング)
Dictionary(ディクショナリー)連想配列の使い方について
Excelの表をPowerPointへ図として貼り付け
VBAエキスパート公式テキスト
2019/5/30発売リニューアル版
2019/7/26発売リニューアル版
こちらは必須として購入した方が良いでしょう。
ちょっと高いなーとは思いますが、
書籍を購入することで、学習用データが提供されています。
・サンプルブック
・VBAエキスパート模擬問題
これらが使えるようになります。
このシリーズでは、テキストを読みながら学習していることを前提とします。
同じテーマ「VBAエキスパート対策」の記事
プロシージャ
イベント
ステートメント(スタンダード)
関数
エラーへの対処
APIとOLEオートメーション
変数と配列
レジストリの操作
ファイルの操作
ユーザーフォームとメニューの操作
VBAスタンダード試験対策まとめ
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
- ホーム
- マクロVBA入門編
- VBAエキスパート対策
- APIとOLEオートメーション
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。