ここでは、VOV(VBA, OLE, VBScript)シリーズの導入として、その目的と簡単なサンプルプログラムを掲げます。
通常、Excelなどのアプリケーションの操作は、画面を見ながらマウスやキーボードで行います。
しかし、よく行う操作パターンに関しては、手順書を書いて置いて、アプリケーションにその手順書どおりに動いてもらえると楽です。
手順書は、アプリケーションが理解してくれるものでなければなりません。そこで、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からプログラムを書くとなると手間と時間がかかるということです。よほど簡単なものでないかぎりデバッグが必要になり、時間がかかります。
今後も類似の操作をやる可能性がないなら、プログラムを書くのは得策とはいえないでしょう。
そもそも、プログラミングのノウハウを覚えること自体に時間がかかります。かなりの学習コストです。それをやるくらいなら通常のキー・マウス操作で対応するというのも一つの判断です。でも ……
マクロやプログラムを実行した環境は次のとおり。
上記以外の環境でも、Officeアプリケーションがインストールされていれば、たいていはマクロとスクリプトを動かせると思います。
VBScript, JScriptは、よほど古いWindowsでないかぎり、最初から使えるようになっています。
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機能により行います。
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
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
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
〜 以上 〜