VBAマクロをExcelやWordと切り離して単体ファイル化し、ダブルクリックで実行できるようにする方法を説明します。言い換えると、WSH (Windows Scripting Host) のVBScript ファイルにする、ということになります。
VBAマクロとVBScriptのコードは共通点が多いので、作成済みのマクロを流用して一部を書き換えることで変換できます。コンパイラーなどのソフトは不要ですし、別の言語を習得する必要もありません。
ここでは、以下のトピックで扱ったVBAマクロをVBScript化する場合を例に説明していきます。
VBE上でVBScriptコードに適応させる
VBScriptのルールでコーディングを加工していきます。ここでの加工は、VBAマクロとしても実行可能な範囲なので、VBE上で適宜デバッグすることもできます。
Sub Word文書を連続置換VBS() '★VBScriptには不要
'(改1)変数のデータ型を除去
Dim appWD 'As Word.Application
Dim docWD 'As Word.Document
Dim appXL 'As Excel.Application
Dim wbXL 'As Excel.Workbook
Dim aryRep 'As Variant
Dim r 'As Long
'(改2)Word、ExcelをCreateObjectでインスタンス化
Set appWD = CreateObject("Word.Application")
Set docWD = appWD.Documents.Open("D:\test\サンプルレポート.docx")
appWD.Visible = True
Set appXL = CreateObject("Excel.Application")
Set wbXL = appXL.Workbooks.Open("D:\test\置換リスト.xlsx")
appXL.Visible = True
aryRep = wbXL.Worksheets("リスト").Range("置換リスト")
'Word文書の処理
With docWD.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.MatchWildcards = False
.MatchFuzzy = False
'(改3)名前付き引数、組み込み定数を排除
For r = 1 To UBound(aryRep)
.Execute aryRep(r, 1), , , , , , , , , aryRep(r, 2), 2 'wdReplaceAll
Next 'r '(改4)For Next を調整
End With
appWD.Quit True '(改3)と同 SaveChanges:=True
End Sub '★VBScriptには不要
改1. 変数宣言のデータ型を除去する
VBScript ではデータ型の区別がありません。このため「As ~」以降を除去します。削除の代わりにコメントアウトしておくと後でわかりやすくできます。
改2. Word、ExcelをCreateObjectでインスタンス化
VBScript からはWordやExcelは外部のアプリなので、インスタンス化してオブジェクトとして扱えるようにします。ライブラリ参照がないため、CreateObject
を用います。
OK : Set appXL = CreateObject("Excel.Application")
NG : Set appXL = New Excel.Application
また、appXL.Workbooks
のようにどのアプリのオブジェクトかを明示します。これ以降、オブジェクトに対するプロパティやメソッドの扱いはVBAと同じです。
改3. 名前付き引数、組み込み定数を排除
ライブラリ参照がないため、名前付き引数や組み込み定数を使用しないように書き換えます。
変更前 : .Execute
FindText:=
検索文字列, ReplaceWith:=
置換文字列, Replace:=wdReplaceAll
変更後 : .Execute
検索文字列,
, , , , , , , ,
置換文字列,
2
名前付き引数の名前部分を削除(この例では FindText:=
など)
代わりに、何番目の引数なのかを明示します。指定を省略する引数は「,
」のみを書きます。
この例のように引数が多いものだと少しややこしいところです。
組み込み定数を使用しない(この例では wdReplaceAll
)
代わりに組み込み定数に対応する値に書き換えます。
値は、VBEのオブジェクトブラウザーで検索して確認できます。
改4. For Next 文を調整
「Next 変数
」を「Next
」のみに書き換えます。VBAではどちらでも可ですが、VBScriptでは「Next 変数
」はエラーになります。
VBScriptをファイル化して実行する
ファイル保存と実行
VBAのコードをコピーして、テキストエディターに貼り付ける
Sub
行と End Sub
行(’★の行)を削除する
VBScriptファイルでは最上位のプロシージャは宣言しません。ファイル自体が宣言のようなものになります。
Shift-JIS エンコードで、拡張子「.vbs」でファイルを保存する
日本語を含む場合はShift-JISでエンコードされている必要があります。
Windows 10 のメモ帳の場合は、保存時に[文字コード]に「ANSI」を指定するとShift-JISになります。
作成したファイルをダブルクリックして実行する