SaveFileDialogを使用してファイルの保存を行う際、
InitialDirectoryに"Environment.SpecialFolder.DesktopDirectory"を使
用すると、ファイル保存ダイアログが開いた時の初期ディレクトリをデス
クトップにできますが、
実行ファイルのファイル名を変更すると、マイドキュメントが初期ディレ
クトリとなってしまいます。
SaveFileDialogのスクリプト部分は下記です。
Dim sfd as SaveFileDialog
sfd.FileName = "テスト" & Now.ToString("yyyyMMdd") & ".xls"
'↓ここでデスクトップを指定
sfd.InitialDirectory = Environment.SpecialFolder.DesktopDirectory
sfd.Filter = "エクセル形式(*.xls)|*.xls"
sfd.OverwritePrompt = False
If sfd.ShowDialog() = DialogResult.OK Then
'エクセルの保存
xlWb.SaveAs(sfd.FileName)
End If
sfd.Dispose()
過去に作成したアプリについてもファイル名を変更しただけで、
初期ディレクトリが変わってしまいました。
・実行ファイル名を変更しただけでも、ディレクトリの表示先は変わるものなのでしょうか。
(例 test.exe [初期ディレクトリ デスクトップ]
ファイル名変更 ⇒ test2.exe [初期ディレクトリ マイドキュメント])
・SaveFileDialog以外でも起こり得るものでしょうか?(試していませんが・・)
また、変わらないようにする方法がありましたら教えてください。
> sfd.InitialDirectory = Environment.SpecialFolder.DesktopDirectory
InitialDirectory プロパティは String 型です。
Environment.SpecialFolder はそういう名前の列挙型です。
なので正しく指定できていません。多分与えた列挙値 DesktopDirectory がそのまま文字列として指定されて、存在しないディレクトリなので無視ってことになります。
ファイルダイアログはシェルが最後に選択したディレクトリをアプリケーションごとに保存して復元する機能が用意されています。実行ファイル名を変えると新しいアプリケーションと認識して(InitialDirectory が無視された結果)デフォルトのディレクトリである My Document を開いているんでしょう。
http://msdn2.microsoft.com/ja-jp/library/system.environment.specialfolder(VS.80).aspx
Environment.SpecialFolder の解説を読んで、この列挙型からディレクトリパスを取得してそれを InitialDirectory に与えてください。
sfd.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)
以上のようにするということでよいでしょうか。
(過去のプログラムをコピーする時に間違えてしまっていました)
これでも、結果が同じになってしまうのですが・・。
デバッグでは、
msgbox(System.Environment.GetFolderPath(Environment.SpecialFolder.Personal))
は、"C:\Documents and Settings\t-itou\デスクトップ" と表示されます。
それでも、元の実行ファイルだとデスクトップが表示されて、
ファイル名を変えると、マイドキュメントが表示されてしまいます。
すいません。
Environment.SpecialFolder.Personal
マイドキュメントを指定してました。
DesktopDirectoryに直して、出来るようになりました。