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"ではありません。 ちょっと気持ち悪いですが。
それでは、今日はこの辺で。