プロが教える店舗&オフィスのセキュリティ対策術

こんにちは、Excelでマクロを組んでいます。ネットワークにファイルサーバーのNasを利用しているのですが、ファイルを開くダイアログで初期表示されるディレクトリをNasのフォルダに指定したいと思っています。
ChDir "\\Nas\最初に開きたいフォルダ"
Application.GetOpenFilename
で指定しても、なぜかローカルのマイドキュメントが開かれてしまいます。ローカルのマイドキュメントはカレントディレクトリに設定されていますが、例えば
ChDir "C:\テストフォルダ名"としてから
Application.GetOpenFilename
とすると、きちんとテストフォルダ名が最初に表示されます。Nasへの接続の問題でしょうか?でも、Nasへログオンするにはユーザー名やパスワードを指定するはずなので、ログオンしていなかった場合はそれを聞いてくると思われるのですが・・・いかがでしょう?パスが間違っていたら、パスが間違っていますというエラーメッセージになると思いますし、、、よろしくお願いします。

教えて!goo グレード

A 回答 (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

この回答への補足

でもなんだかカレントディレクトリを変更した後、元に戻す必要はないのかな?と思ってきました。だって、ファイルを開くダイアログでファイルを開いたら、カレントディレクトリは開いたファイルのあるディレクトリになるわけですよね?そのあと、マイドキュメントにあるファイルを開いたら、カレントディレクトリはマイドキュになりますか?ごちゃごちゃですみません・・・

補足日時:2006/10/30 13:40
    • good
    • 0
この回答へのお礼

エクセルに設定されていた保存先が変更されてしまうかと思ってしまいました。大丈夫みたいですね。現在のカレントディレクトリも一旦退避させて、ダイアログを開いた後にすぐ元にもどしてしまえばいいんですね。よくわかりました<^!^>、どうもありがとうございました。

お礼日時:2006/10/30 12:55

> エクセルに設定されていた保存先が変更されてしまうかと


> 思ってしまいました。

ああ。そういうことですか。大丈夫ですよ。別名で保存で開くダイアログ上の
フォルダが変わるぐらいで、別にファイル自体が移動するわけではありません。
上書き保存なら全く問題ありませんし、別にカレントフォルダはどちらでも
良いのでは?
    • good
    • 0
この回答へのお礼

どうもありがとうございました。大変助かりました。また機会がありましたらよろしくお願いします。m(_ _)m

お礼日時:2006/10/31 13:43

#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 が
公式発表してます。今から心配する必要はありません。
    • good
    • 0

No.1ですが、補足しておきます。


APIも環境に依存しますので、もし使用するのであればそれだけ注意してください。
(Windows系でもいきなりなくなったり仕様が変わったりすることもありますので)

WSHの方は将来無くなる予定です。
    • good
    • 0

こんにちは。

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で設定されていたカレントディレクトリが変更されてしまいませんか?

補足日時:2006/10/30 11:52
    • good
    • 0

カレントドライブを変更しないとchdirは有効になりませんので、ご質問の


ケースはそのようになります。
逆に言えば、UNC名でカレントフォルダを指定することはできません。

方法としては、UNC名をネットワークドライブに割り当てた後、chdriveで
カレントドライブをそのネットワークドライブに変更し、それからchdir以降を
行えば可能だと思います。
    • good
    • 0
この回答へのお礼

ChDriveでドライブを変更してから行ってもできなかったんですよね・・・結局WSHで対応することにしました。APIやWSHについても今後について検討することができ、大変参考になりました。ご意見どうもありがとうございました。

お礼日時:2006/10/31 13:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング