VOVシリーズの目的と簡単なサンプルプログラム

2016/08/13

ここでは、VOV(VBA, OLE, VBScript)シリーズの導入として、その目的と簡単なサンプルプログラムを掲げます。

    


《このページの目次》


    

1. VOVシリーズの目的

 通常、Excelなどのアプリケーションの操作は、画面を見ながらマウスやキーボードで行います。

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

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

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

 しかし、それだけでなく、OLEという仕組みを通して全自動一括処理を行うことも試みます。

    

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

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

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

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

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

    

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

 OLEという仕組みを使うといっても、ExcelなどのOfficeアプリケーションが理解してくれるVBAのルールに従うという点は同じです。

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

    

◇ プログラミングによる一括処理のメリット・デメリット

 プログラミングによる一括処理は、同じような操作を繰り返し行う場合にその効果が現れます。的確なプログラムができていれば、3回繰り返すのも100回繰り返すのも、手間は同じです。

 全く同じ操作でなくても、似たような操作であればプログラムを部分的に書き換えることで対応できます。ゼロからプログラムを書かなくても大丈夫です。

 また、手順書であるプログラムをいくつか用意しておくと、それらを組み合わせることで簡単に目的を達成できることがあります。いわば操作のパッケージ化といえます。

    

 デメリットは、0からプログラムを書くとなると手間と時間がかかるということです。よほど簡単なものでないかぎりデバッグが必要になり、時間がかかります。

 今後も類似の操作をやる可能性がないなら、プログラムを書くのは得策とはいえないでしょう。

 そもそも、プログラミングのノウハウを覚えること自体に時間がかかります。かなりの学習コストです。それをやるくらいなら通常のキー・マウス操作で対応するというのも一つの判断です。でも ……

このページの目次に戻る


    

2. 実行環境

 マクロやプログラムを実行した環境は次のとおり。

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

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

このページの目次に戻る


    

3. OLE利用のVBScriptの例

 Excel, Word, PowerPoint を自動操作するVBScriptの例を掲げておきます。

 たとえば、vov_xls.vbs を実行すると、Excelの起動から終了まで自動実行されて、カレントフォルダに test.xls が作られます。

 test.xlsをオープンすると、A1セルに Hello! と書かれているはずです。

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

 Word用の vov_doc.vbs、PowerPoint用の vov_ppt.vbs のどちらも、Hello! と書き込んでファイルを保存します。

 最も単純で基本的なOLE利用の形態といえます。

 シリーズでは、その単純な形態をふくらませつつ解説を加えていく予定です。

    

 三つのVBScriptは、vov_intro.zipに同梱しておきます。

 それから、長くなるのでここには掲げませんが、zipには Accessデータベースファイルの test.mdb を書き出すための vov_mdb.vbs を含めてあります。Accessがインストールされていなくても動作します。

 また、その test.mdbをExcelファイルの test_mdb.xls に変換するための vov_mdb_xls.vbs も同梱しておきます。変換は、ExcelのQueryTable機能により行います。

    

△ Excel用の vov_xls.vbs

 1Option Explicit
 2Dim FSO, BookPath
 3Dim EXLapp, WBobj, WSobj
 4Const xlWorkbookNormal = -4143
 5
 6Set FSO = CreateObject("Scripting.FileSystemObject")
 7BookPath = FSO.GetAbsolutePathName("test.xls")
 8If (FSO.FileExists(BookPath) = True) Then FSO.DeleteFile(BookPath)
 9Set EXLapp = CreateObject("Excel.Application")  ' Excelの起動
10EXLapp.Visible = True  ' Excelを見える状態に
11Set WBobj = EXLapp.Workbooks.Add()  ' Workbookの新規作成
12Set WSobj = WBobj.Worksheets(1)
13WSobj.Range("A1").Value = "Hello!"
14WBobj.SaveAs BookPath, xlWorkbookNormal
15WBobj.Close
16EXLapp.quit

    

△ Word用の vov_doc.vbs

 1Option Explicit
 2Dim FSO, DocPath
 3Dim WDapp, DOCobj, Para
 4Const WdFormatDocument = 0
 5
 6Set FSO = CreateObject("Scripting.FileSystemObject")
 7DocPath = FSO.GetAbsolutePathName("test.doc")
 8If (FSO.FileExists(DocPath) = True) Then FSO.DeleteFile(DocPath)
 9Set WDapp = CreateObject("Word.Application")  ' Wordの起動
10WDapp.Visible = True  ' Wordを見える状態に
11Set DOCobj = WDapp.Documents.Add()
12Set Para = DOCobj.Content.Paragraphs.Add
13Para.Range.Text = "Hello!"
14DOCobj.SaveAs DocPath, WdFormatDocument
15DOCobj.Close
16WDapp.quit

    

△ PowerPoint用の vov_ppt.vbs

 1Option Explicit
 2Dim FSO, PptPath
 3Dim PPTapp, PresenObj, NewSlide, SlideCount, ShapeObj
 4Const ppSaveAsPresentation = 1
 5Const ppLayoutTitleOnly = 11
 6
 7Set FSO = CreateObject("Scripting.FileSystemObject")
 8PptPath = FSO.GetAbsolutePathName("test.ppt")
 9If (FSO.FileExists(PptPath) = True) Then FSO.DeleteFile(PptPath)
10Set PPTapp = CreateObject("PowerPoint.Application")  ' PowerPointの起動
11PPTapp.Visible = True  ' PowerPointを見える状態に
12Set PresenObj = PPTapp.Presentations.Add()
13SlideCount = PresenObj.Slides.Count  ' 現在のスライド枚数
14Set NewSlide = PresenObj.Slides.Add(SlideCount+1, ppLayoutTitleOnly)
15NewSlide.Shapes.Title.TextFrame.TextRange.Text = "TestSlide"
16Set ShapeObj = NewSlide.Shapes.AddTextbox(1, 100, 100, 200, 50)
17ShapeObj.textFrame.textRange.text = "Hello!"
18PresenObj.SaveAs PptPath, ppSaveAsPresentation
19PresenObj.Close
20PPTapp.quit

    

〜 以上 〜


VOVシリーズ トップページ