豚吐露@wiki
ファイル種別を指定できる保存ダイアログの作り方
最終更新:
Bot(ページ名リンク)
-
view
アクセスでは
Application.FileDialog(msoFileDialogSaveAs)
を使った場合、ファイルフィルタが使えない。
※かならず(*.*)になってしまう。
msofiledialogfilepicker使ってごまかす方法もあるが、filepickerだと既存ファイルしか選択できなくなっちゃう。(ノД`)
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秒