豚吐露@wiki

ファイル種別を指定できる保存ダイアログの作り方

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可

アクセスでは
Application.FileDialog(msoFileDialogSaveAs)
を使った場合、ファイルフィルタが使えない。
※かならず(*.*)になってしまう。
msofiledialogfilepicker使ってごまかす方法もあるが、filepickerだと既存ファイルしか選択できなくなっちゃう。(ノД`)

そこで以下の方法を使うと良いらしい。

関数定義 引数名 概要
WizHook.GetFileName(
 0, hwndOwner Long ダイアログのオーナーとなるオブジェクトのハンドルを渡します。
 , AppName String 実行アプリケーションの名前を指定します。
 , DlgTitle String ダイアログのウィンドウタイトルに表示する文字列を指定します。省略時は既定のタイトル(「ファイルを開く」あるいは「名前を付けて保存」)が表示されます。
 , OpenTitle String 実行用コマンドボタンの標題に当たる文字列を指定します。省略時は既定の標題(「開く」あるいは「保存」)が表示されます。
 strFile, File String 入出力用引数です。パスを渡すと、ダイアログの [ファイル名] 欄にそのファイル名がセットされます。またユーザーが選択したファイルのフルパスが格納されます。
 , InitialDir String ダイアログの初期表示ディレクトリを指定します。省略時はカレントディレクトリが表示されます。
 CSV(*.csv)|*.csv, Filter String [ファイルの種類] リストボックスに設定する一覧を指定します。形式は「表示用文字列 1|拡張子 1|表示用文字列 2|拡張子 2|...」の繰り返しになります。区切り記号「|」は Chr$(0) あるいは定数 vbNullChar でも構いませんが、VB では「|」を使った方が簡単でしょう。
なお表示用文字列の中の拡張子を括る括弧を誤って全角文字で指定すると、実行されません。初心者はよくハマるので、注意してください。
 0, FilterIndex Long 初期表示時に [ファイルの種類] リストボックスの何行目を既定で選択するかをインデックス番号で指定します。先頭行は 0 から開始します。
 0, View Long ファイル一覧の表示スタイルを指定します。
0=詳細、1=プレビュー、2=プロパティ、3=一覧、4=縮小表示、5=アイコン、8=並べて表示、です。ただし 4 以降は Windows XP SP3 + Access 2003 SP3 で確認しています。OS 依存の可能性があるため、どの環境でも有効かどうかは不明です。
なお View 引数は単独では機能せず、flags 引数に &H40 を指定して初めて有効になります。
 0, flags Long ダイアログの動作を指定するオプション値をビットフラグで指定します。これは Win32 API で使用される OPENFILENAME 構造体の Flags と微妙に異なります。現時点で判明しているオプションについては、後述します。
 FALSE fOpen Boolean ダイアログの種別を指定します。True を設定すると [ファイルを開く] になり、False を指定すると [名前を付けて保存] になります。
)

Const ENABLE_WIZHOOK = 51488399
Const DISABLE_WIZHOOK = 0

Const sInitDir As String = "c:\\wk"
Const sTitle As String = "保存ダイアログ"
Const sFilter As String = "全て(*.*)|(*.*)|CSV(カンマ区切り)(*.csv)|*.csv"

Dim sPath As String 'target path
Dim lFlag As Long 'GetFileName option

Dim lRet As Long

WizHook.Key = ENABLE_WIZHOOK 'WizHook有効化

lFlag = 1 'gfnFlagsOverWritePromptを設定
lRet = WizHook.GetFileName(0, "", sTitle, "", sPath, sInitDir, sFilter, 0, 0, lFlag, False)

WizHook.Key = DISABLE_WIZHOOK 'WizHook無効化

これで『sPath』に入力したファイルのpathが入る。



更新日: 2010年06月22日 (火) 20時09分17秒
記事メニュー
ウィキ募集バナー