- ベストアンサー
VBAファイルを開くダイアログでの初期表示にファイルサーバーを指定
- ExcelのVBAを使ってファイルを開くダイアログで初期表示されるディレクトリをファイルサーバーに指定したいです。
- ChDir関数を使用して指定しようとしても、ローカルのマイドキュメントが表示されてしまいます。
- Nasへの接続やログオンの問題かもしれませんが、正しいパスを指定してもエラーメッセージが表示されず、正常に接続できません。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> もともとWindowsで設定されていたカレントディレクトリが変更されて > しまいませんか? 良く意味がわかりませんが、それがカレントディレクトリを変更すると いうことなのでは? GetOpenFilename の時だけ変更したいなら... Sub Sample() Dim sDirPathBackup As String Dim sFileName As String ' 現在のカレントディレクトリパスを退避 sDirPathBackup = CurDir MsgBox CurDir, , "現在のカレントディレクトリ" With CreateObject("WScript.Shell") ' カレントディレクトリ変更 .CurrentDirectory = "D:\AITEMP" ' ダイアログ開く sFileName = Application.GetOpenFilename("EXCELファイル (*.xls), *.xls") ' カレントディレクトリを元に戻す .CurrentDirectory = sDirPathBackup End With ' 以後の処理継続~ MsgBox CurDir, , "元に戻ってます^^" End Sub
その他の回答 (5)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> エクセルに設定されていた保存先が変更されてしまうかと > 思ってしまいました。 ああ。そういうことですか。大丈夫ですよ。別名で保存で開くダイアログ上の フォルダが変わるぐらいで、別にファイル自体が移動するわけではありません。 上書き保存なら全く問題ありませんし、別にカレントフォルダはどちらでも 良いのでは?
お礼
どうもありがとうございました。大変助かりました。また機会がありましたらよろしくお願いします。m(_ _)m
- KenKen_SP
- ベストアンサー率62% (785/1258)
#2 です。誤解を招きそうなので補足しときます。 確かに API もモノによって環境依存します。しかし、 SetCurrentDirectory API は Win95~WinXPで大丈夫です。恐らくは次期 Windows Vista でも。 Windows の仕様変更を MS のアナウンス前から気にしていたらプログラムは 不可能ですから、現段階では心配無用だと思います。 WSH(Windows Scripting Host)は、Internet Explorer 4 以上がインストール されていれば OS に標準的にインストールされてます。Win98 以降なら大丈夫 だったと思いますが、この点は確認してません。 Windows95等でブラウザのアップデートを全くしてない、WSH をインストール していない PC だと動きません。 以前の LoveLetter ウイルス騒動で WSH を問題視したシステム管理者が WSH 禁止目的で、意図的に WSH をアンインストールしている場合も動きません。 この2点において API による方法に比べれば環境を選ぶ方法と言えますね。 が、ほとんどの PC で動くでしょう。 また、WSH は 次期 Windows Vista までは少なくとも搭載されると MS が 公式発表してます。今から心配する必要はありません。
- Yeti21
- ベストアンサー率47% (396/830)
No.1ですが、補足しておきます。 APIも環境に依存しますので、もし使用するのであればそれだけ注意してください。 (Windows系でもいきなりなくなったり仕様が変わったりすることもありますので) WSHの方は将来無くなる予定です。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 2 つの方法があります。お好みで。 ともに参照先が存在しない場合の例外処理が必要です。特に WSH の方は エラーが発生して処理が中断されます。 ▼ API を使う方法 Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" ( _ ByVal lpPathName As String _ ) As Long Sub Sample1() Call SetCurrentDirectory("\\Nas\最初に開きたいフォルダ") MsgBox CurDir End Sub ▼ WSH を使う方法(環境依存しますが Win98 以降なら OK かな?) Sub Sample2() CreateObject("WScript.Shell").CurrentDirectory = "\\Nas\最初に開きたいフォルダ" MsgBox CurDir End Sub
補足
WSHを調べました。WSHが何であるかわかったのですが、WSHを利用した場合、もともとWindowsで設定されていたカレントディレクトリが変更されてしまいませんか?
- Yeti21
- ベストアンサー率47% (396/830)
カレントドライブを変更しないとchdirは有効になりませんので、ご質問の ケースはそのようになります。 逆に言えば、UNC名でカレントフォルダを指定することはできません。 方法としては、UNC名をネットワークドライブに割り当てた後、chdriveで カレントドライブをそのネットワークドライブに変更し、それからchdir以降を 行えば可能だと思います。
お礼
ChDriveでドライブを変更してから行ってもできなかったんですよね・・・結局WSHで対応することにしました。APIやWSHについても今後について検討することができ、大変参考になりました。ご意見どうもありがとうございました。
お礼
エクセルに設定されていた保存先が変更されてしまうかと思ってしまいました。大丈夫みたいですね。現在のカレントディレクトリも一旦退避させて、ダイアログを開いた後にすぐ元にもどしてしまえばいいんですね。よくわかりました<^!^>、どうもありがとうございました。
補足
でもなんだかカレントディレクトリを変更した後、元に戻す必要はないのかな?と思ってきました。だって、ファイルを開くダイアログでファイルを開いたら、カレントディレクトリは開いたファイルのあるディレクトリになるわけですよね?そのあと、マイドキュメントにあるファイルを開いたら、カレントディレクトリはマイドキュになりますか?ごちゃごちゃですみません・・・