WordVBAとOLE:はじめに&準備

カテゴリー名: [WordVBAとOLE 基本構成とその操作

2016/10/09

当シリーズでは、Wordをプログラミングのノウハウで動かすよう試みます。何回かに分けて掲載。

VBA(Visual Basic for Applications)の基本的な記述方法を確認しながら、
OLE(Object Linking and Embedding)という仕組みを利用した場合は、どんなふうに記述したらいいかを見ていきます。

OLEは、VBScriptというプログラミング言語から利用します。同じ処理を行うJScriptも掲載。

 当シリーズで紹介するマクロファイルやVBScriptのファイル一式は、 vovWD01.zip という圧縮ファイルに同梱しておきます。

    


《このページの目次》


    

はじめに

 通常、Wordの操作は、画面を見ながらマウスやキーボードで行います。

 しかし、よく行う操作パターンに関しては、手順書を書いて置いて、Wordにその手順書どおりに動いてもらえると楽です。

 手順書は、Wordが理解してくれるものでなければなりません。そこで、VBAという一種のプログラミング記法で手順書を書くことになります。

 ここでは、そのプログラミング記法の基本的な事柄について記します。

    

◇ VBAのマクロに加えてOLEも取り上げる理由

 VBAのルールに従って書かれた手順書は、よくマクロといわれます。

 マクロどおりにWordに動いてもらうためには、まずマクロをWordに組み込む必要があります。更に、Wordを起動してそのマクロを実行しなければなりません。

 しかし、「マクロを組み込む」のも「マクロを実行する」のも、手作業でやるのは面倒です。

 ということで、OLEという仕組みを利用して、全自動一括処理をするよう試みます。OLEは、Wordを外部から自動操作するための機構です。「組込み」が必要ありません。

    

 OLEを利用する手段としてVBScriptを用います。test.vbsのような拡張子が .vbs のプログラムファイルです。

 VBA, VBScriptのどちらも Visual Basicをベースにしているので類似する点が多いです。

 OLEという仕組みを使うといっても、Wordが理解してくれるVBAのルールに従うという点は同じです。

 なので、まずは VBAのマクロに触れて、それから VBScriptのプログラムについて記します。なお、VBScriptの「プログラム」は、「スクリプト」ともいいます。

目次に戻る


    

掲載するマクロとスクリプトの例

 掲載するのは、VBAのマクロ、OLEを利用するVBScriptプログラムです。他に、同じ処理を行う JScriptも掲載。

(1) VBAマクロ
Wordに動いてもらうための手順書です。Wordに組み込んでから実行します。
(2) OLEを利用するVBScript
VBAのマクロを組み込むのではなく、同等の処理をVBScriptによって行うプログラムです。外部からWordを自動操作するイメージ。

    

 具体的な例を上げると下のとおり。

 まず VBAマクロです。カーソル位置に test の4文字を書き込んでから改行します。

-------- ここから
Sub Macro1()
    Selection.TypeText "test"  ' カーソル位置に文字入力
    Selection.TypeParagraph  ' 改行
End Sub
-------- ここまで

 上は、何かしらの方法でWordに組み込む必要があります。通常は VBE(Visual Basic Editor)というマクロ編集用のエディタで行います。

 また、このマクロを実行するには、Wordを起動した状態でメニューからマクロの実行を選択しなければなりません。

    

 次に OLEを利用するVBScriptです。マクロの組込みは行いません。

 プログラムが test.vbs という名前で保存されている場合、それを実行すると、
Wordが起動し、カーソル位置(自裁には文書先頭)に test の4文字が書き込まれ、Test01.doc という名前でWordファイルが保存され、Wordが終了します。

-------- ここから
Option Explicit
Dim FSO, DocPath
Dim WDapp, DOCobj
Const wdFormatDocument = 0

Set FSO = CreateObject("Scripting.FileSystemObject")
DocPath = FSO.GetAbsolutePathName("Test01.doc")
If (FSO.FileExists(DocPath) = True) Then FSO.DeleteFile(DocPath)
Set WDapp = CreateObject("Word.Application")  ' Wordの起動
WDapp.Visible = True  ' Wordを見える状態に
Set DOCobj = WDapp.Documents.Add()  ' 新規Word文書追加
WDapp.Selection.TypeText "test"  ' カーソル位置に文字入力
WDapp.Selection.TypeParagraph  ' 改行
DOCobj.SaveAs DocPath, wdFormatDocument  ' Word文書の保存
WDapp.Quit
-------- ここまで

 上の test.vbs を実行するには、Explorer(マイコンピュータ)上で test.vbs に焦点を当て、エンターキーをたたきます。あるいは、マウスでダブルクリックするといった方がいいでしょうか。

 そうすれば、Wordの起動から終了まで自動的に実行されて、カレントフォルダに Test01.doc ができているはずです。

目次に戻る


    

実行環境

 マクロとスクリプトを実行した環境は次のとおり。

 上記以外でも、Wordがインストールされていれば、たいていはマクロとスクリプトを動かせると思います。

 VBScriptは、よほど古いWindowsでないかぎり、最初から使えるようになっています。

目次に戻る


    

VBScriptでマクロを組み込むための準備

 VBAのマクロをWordに組み込む処理を手作業でやりたくないので、「組込み」のためのVBScriptプログラムを用意しました。

 SetWordMacro.vbsがそれです。vovWD01.zipに同梱してあります。

 SetWordMacro.vbs を実行すると、ファイル選択ダイアログボックスが出るので、macro01.txtなどのマクロファイルを選びます。

 すると、そのマクロが組み込まれて Test01.doc というWordファイルが保存されます。

 また、マクロには Control + 8 というショートカットキーが割り当てられます。フルキーボードの数字の8です。テンキーの方ではありません。

 Test01.doc をWordで開いてから Control + 8 を入力するとマクロが実行されます。

    

 ということで、VBEを立ち上げてマクロのコードを入力する必要はありませんが、
Wordのマクロセキュリティの設定をあらかじめ変更しておく必要があります。
設定変更は一度やるだけでOKです。

 WordをGUI操作して、次の設定変更を行います。具体的な操作方法は、Wordのバージョンによって違うのでここでは省略します。

    

 上記は Wordのセキュリティを緩める処置です。あまり神経質にならなくてもいいとは思いますが、気になるようでしたら、SetWordMacro.vbsによるマクロの組み込みをやらない時はセキュリティを強化しておく方がいいかもしれません。

 なお、OLEを利用するVBScriptのプログラムを実行する場合は、上記のWordのセキュリティを緩める処置は必要ありません。

 前述の test.vbs を実行するときは、セキュリティレベルが強固なままで大丈夫です。

 必要になるのは SetWordMacro.vbs の実行のときです。

目次に戻る


    

手作業でマクロを組み込む際のショートカットキー

 手作業でマクロを組み込みたいときに、次のショートカットキーが便利です。

 Wordを起動した後で次ぎの二つのショートカットキーを入力すると、VBEが立ち上がり、そして、マクロのコードを入力する場面になります。

 コードウィンドウで Sub Macro1() [enter] などと入力すると、マクロのおわりを示す End Sub が自動的に書き込まれます。

〜 以上 〜