システムエンジニア兼IT講師の備忘録

技術やトレーニングテクニックなどを思いのままに発信していきます。

VBScriptで「ファイルを開く」ウィンドウを開く

みなさんあけましておめでとうございます!

先日、VBScriptでコードを組んでいまして、 どうしても「ファイルを開く」ウィンドウを開きたかったのですが、 どうやらVBScript自体にはそういった機能が無いようです。

InputBoxを使ってファイル名をフルパスで入力してもらうとか、 色々小技はありそうですが、どうも使い勝手が悪いと感じました。

そこで、ちょっとした裏技を入手しましたのでご紹介します。

Excelを開いて、Excelの「ファイルを開く」ウィンドウを使う

Microsoft Excelには、「ファイルを開く」ウィンドウが備わっているので、 VBScriptからExcelを開いた上でこのウィンドウを表示させ、 あとからExcelをしっかり終了してやればOKという寸法です。

コードはこんな感じになります。

'①Excelを開く
Set excel = CreateObject("Application.Excel")

'②Excelそのものを使いたいわけではないので、Excelは非表示がオススメ。
'Trueにすれば表示できます
excel.Application.Visible = False

'③Excelの「ファイルを開く」ウィンドウを呼び出し、ファイルパスを戻り値として受け取る
openFileName = excel.Application.GetOpenFileName("ログファイル, *.log")

'④Excelを終了する
excel.Quit

'これで、変数openFileNameにはファイルのフルパスが保存されているので、
'好きなように使う(例えばメモ帳でファイルを開く、など)
WScript.CreateObject("WScript.Shell").Run "notepad.exe" & openFileName

コードの③部分の解説になりますが、開くファイル形式はなんでも大丈夫です。 たとえば、スクリプト内でJSONのファイルが開きたい!ということであればこのようになります。

openFileName = excel.Application.GetOpenFileName("JSONファイル, *.json")

この関数の引数のうちの前半は、ウィンドウ上で表示されるファイル形式名ですので、自分や利用者がわかればなんでも良いです。 後半は、見ての通り拡張子です。txtでもxlsxでも、あるいは自分の独自のファイルでもいけます。

あくまでも、Excelの「ファイルを開く」を利用してファイルパスを取得するだけですね。

ちょっとした注意点ですが、この引数は全部で一つの引数ですのでご留意ください。 "メモ帳, .txt"であって、"メモ帳", ".txt"ではありません。 ちょっと気持ち悪いですが。

それでは、今日はこの辺で。