こんにちは。
メール送信の自動化ツールを作ってまして、添付ファイルを指定させるUIを素敵✨にしたいなーと思い、[ファイルを開く]ダイアログ的な表示ができないか?と思い色々調べてみました。
■ 動作環境
OS: Windows 8.1
Excel: 2013
■ GetOpenFilenameメソッド
ApplicationオブジェクトのGetOpenFilenameメソッドは、 [ファイルを開く]ダイアログボックスを表示し、利用者が選択したファイルのフルパス情報を返します。
> Applicationオブジェクト.GetOpenFilename([FileFilter], [FilterIndex], [Title], [ButtonText], [MultiSelect])
引数 FileFilter は、(省略可能)ファイルの種類を指定する文字列(ファイルフィルタ文字列)を指定、省略すると「すべてのファイル (*.*),*.*」
引数 FileIndex は、(省略可能)引数 FileFilter で指定したフィルタの既定値を指定
引数 Title は、(省略可能)ダイアログボックスのタイトルを指定
引数 ButtonText は、(省略可能)Macintoshのみ指定可能
引数 MultiSelect は、(省略可能)複数ファイルを選択できる(True)、1つのファイルしか選択できない(False:既定値)
返り値は、利用者が選択、もしくは入力したファイルの名前とパス名を返す。 引数 MultiSelect がTrueの場合は、選択されたファイルの名前の配列を返す。 入力が取り消された場合は、Falseを返す。
■ GetOpenFilenameメソッドの使用例
□ 1つのファイルを指定
ポイントは、GetOpenFilenameメソッドをコールする前に、カレントディレクトリを変更し、[ファイルを開く]ダイアログの対象のディレクトリを変更している点です。
[ESC]キー押下、×マーク押下、「キャンセル」ボタン押下時は、デバックウィンドウに「選択されませんでした」と表示されます。
任意のファイルを指定し「開く」ボタン押下時は、デバックウィンドウに指定されたファイルのフルパス名が表示されます。
□ 複数のファイルを指定
MultiSelect = True を指定した場合は、バリアント型配列が返されるので、For Each文でグルグル回します。
結果はこんな感じです。
■ まとめ
いかがでしたでしょうか?
フィルタを凝るともっと実用的になりますが、ここまで理解できるだけでも、十分リッチなUIを実現できると思います。ファイル名(フルパス)を指定させるようなUIを開発される場合は、ぜひトライしてみてください!
次回以降も、苦労した点を備忘録しようと思います。
Comentarios