VBAファイルを開くダイアログでの初期表示にファイルサーバーを指定

このQ&Aのポイント
  • ExcelのVBAを使ってファイルを開くダイアログで初期表示されるディレクトリをファイルサーバーに指定したいです。
  • ChDir関数を使用して指定しようとしても、ローカルのマイドキュメントが表示されてしまいます。
  • Nasへの接続やログオンの問題かもしれませんが、正しいパスを指定してもエラーメッセージが表示されず、正常に接続できません。
回答を見る
  • ベストアンサー

VBA ファイルを開くダイアログでの初期表示にファイルサーバーを指定

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

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

> もともと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

nao_lin
質問者

お礼

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

nao_lin
質問者

補足

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

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

> エクセルに設定されていた保存先が変更されてしまうかと > 思ってしまいました。 ああ。そういうことですか。大丈夫ですよ。別名で保存で開くダイアログ上の フォルダが変わるぐらいで、別にファイル自体が移動するわけではありません。 上書き保存なら全く問題ありませんし、別にカレントフォルダはどちらでも 良いのでは?

nao_lin
質問者

お礼

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

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

#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.3

No.1ですが、補足しておきます。 APIも環境に依存しますので、もし使用するのであればそれだけ注意してください。 (Windows系でもいきなりなくなったり仕様が変わったりすることもありますので) WSHの方は将来無くなる予定です。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。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

nao_lin
質問者

補足

WSHを調べました。WSHが何であるかわかったのですが、WSHを利用した場合、もともとWindowsで設定されていたカレントディレクトリが変更されてしまいませんか?

  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.1

カレントドライブを変更しないとchdirは有効になりませんので、ご質問の ケースはそのようになります。 逆に言えば、UNC名でカレントフォルダを指定することはできません。 方法としては、UNC名をネットワークドライブに割り当てた後、chdriveで カレントドライブをそのネットワークドライブに変更し、それからchdir以降を 行えば可能だと思います。

nao_lin
質問者

お礼

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

関連するQ&A

  • VBAのダイアログ表示について

    VBA ダイアログ表示について 通常マイドキュメントのダイアログじゃなく直接下記の命令文で指定のフォルダをフォルダを開くダイアログを指定したつもりですが、なぜかマイドキュメントのダイアログが表示されます。 初心者でVBAの事良くわかっていません。 だれかアドバイスをお願いできないでしょうか? Dim Openfile As String Chdir "\Main\VBAdata" Openfile = Application.getOpenFilename("テキスト ファイル,*.txt")

  • Excel VBA:ダイアログを使ってファイル名を取得したい

    ファイルを開く際に、GetOpenFilenameを使用し、以下のように記述しています。 Dim sFName As String Dim sPath As String sPath = ThisWorkbook.Path & "\データフォルダ" ChDir sPath sFName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", MultiSelect:=False) このとき、win98ですと、指定したフォルダが表示されますが、 win2000やXPですと、Excelのカレントフォルダが表示されます。 ダイアログ表示したときに、任意のフォルダを表示させるには、どのようにしたらよいですか? ご回答よろしくお願いします。

  • VBAでファイルOPEN ダイアログを使用したいです

    現在、指定したファイルを開くVBAを書いているのですが、 ↓こんなの ----------------------------------------------------------- Dim vntFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="開けゴマ" _ , MultiSelect:=False _ ) 'ファイルが選択されているときは '選択したファイルをWorkbooks.Openメソッドで開きます If vntFileName <> False Then Workbooks.Open Filename:=vntFileName End If ---------------------------------------------------------------- あらかじめ開くディレクトリを、ネットワーク上のフォルダに指定したいのですが、どこにパスを書いたらいいのか、わかりません。 教えていただけますでしょうか。

  • EXCEL2000のVBAで、ディレクトリを指定するダイアログボックスを出したい

    VBA歴日も間もない者です。仕事上でVBAをいろいろいじくっています。 Excel2000VBAで、ディレクトリの指定をできるダイアログ画面はないのでしょうか? ユーザーにディレクトリを入力してもらいたいのですが、方法としては、1)直接手で打ってもらうか、2)ダイアログで指定できるようにするかにしたいのですが、あいにく Application.Dialogs(xlDialogOpen).Show Application.GetOpenFilename で「ファイルを開く」でディレクトリを割り出す方法しか分かりませんでした。 できれば、ディレクトリ指定のダイアログ画面をだしたいのですけど、他に方法があれば教えてください。よろしくお願いします。

  • ダイアログボックスのpathの指定で下位フォルダを指定したい

    Excel2003 でマクロ作成中の超初心者です。以下のコードで21年度のフォルダが開けます。が、21年度\個人別 という下位のフォルダを指定したいのです。pathを\C・・・から指定すればできそうですが、このマクロを他のPCで実行した場合pathがみつかりませんの エラーが出ると思います。どう指定したらよろしいでしょうか。 Private Sub CommandButton7_Click() Dim OpenFileName As String On Error Resume Next ChDir "21年度" OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If End Sub

  • ACCESS2000 VBAでのファイル名指定

    お世話になります。 先日、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=383826 こちらの質問で、フォームのコマンドボタンからExcelファイルをACCESSテーブルへインポートする方法を教えていただきました。 で、新たに分らないことがでてきました。 回答で教えていただいた参考URLで、ファイル(Excelファイル)を指定するのに >strxls = "C:\My Documents\sample_127.xls" となっておりました。データベースが置いてあるフォルダと同じフォルダを参照したくて、 strxls = "sample_127.xls" とだけ入れてみたんですが(これでカレントディレクトリを見てくれるだろうと思っていたんですが)、実際に動かしてみると、マイドキュメントのフォルダを参照していました。 カレントディレクトリを参照させるには、どうしたらよいでしょうか。 やはり、フルパスを記述するしかないのでしょうか。

  • EXCEL マクロでファイルサーバーを指定する

    現在、Cドライブ内でファイルを選択していますが、共有のファイルサーバー上のフォルダー内のファイルを選択できるようにしたいと考えています。色々とネット等で検索してみましたが、自分に合ったものが見つからず質問させて頂いた次第です。 下記をどの様に直したら良いのでしょうか? 宜しくお願い致します。 因みに ファイルサーバーのパスは Y: ¥¥fileserver¥AN¥IT¥91_Users¥700_Create¥その他業務¥Excelファイル類 です。 MsgBox "挿入する「ファイル」を選択してください" Dim OpenFileName As Variant ChDir "C:" OpenFileName = Application.GetOpenFilename("挿入ファイル,*.*") If VarType(OpenFileName) = vbBoolean Then MsgBox "キャンセルされました" Else MsgBox OpenFileName & " が選択されました" End If

  • 指定ファイルのみ読み込んで表示する

    現在、以下のコードで指定フォルダー内の全ファイルをA2以下に読み込んでいます。 これでは、処理する必要のないファイルまで読み込まれてしまいます。 (そのため、現在は処理必要ないファイルは手動でA列から削除しています。) Set dlg = Application.FileDialog(msoFileDialogFolderPicker) を Set dlg = Application.FileDialog(msoFileDialogFilePicker) に変更すると ユーザーがファイルを処理が必要なファイルのみ選択できそうですが その場合、どのように変更すれば良いですか ? ’-------------------------------------------------------------- Option Explicit Public dlg As FileDialog Public fol_path As String 'フォルダのフルパス Sub フォルダを指定してファイル名一覧を作成する() Dim f_name As String 'ファイル名 Dim i As Long 'ファイル名を出力する行番号 '書き出しセル初期化 Range("A2:B100").ClearContents 'フォルダを指定するモードでFileDialogを表示 Set dlg = Application.FileDialog(msoFileDialogFolderPicker) '読み込み初期フォルダーの指定 dlg.InitialFileName = "C:\Users\Nubo\Desktop\Temp\" If dlg.Show = False Then MsgBox "処理はキャンセルされました。" Exit Sub Else End If fol_path = dlg.SelectedItems(1) '指定されたフォルダのフルパスを変数に格納 f_name = Dir(fol_path & "\*") 'Dir関数を使って、指定されたフォルダ内の一つ目のファイル名を取得 If f_name = "" Then MsgBox fol_path & " にはファイルが存在しません。" Exit Sub End If 'シートに書き出す Range("C1").Value = fol_path & "のファイル一覧" Range("A1").Value = "現在のファイル名" '見出し行の表示(太字、フォントサイズ 12) With Range("A1:B1") .Font.Bold = True .Font.Size = 12 End With 'A2セルから下にファイル名を書き出し i = 2 Do Until f_name = "" Cells(i, "A").Value = f_name i = i + 1 '次のファイル名を取得 f_name = Dir Loop 'セルの内容に合わせて列幅を自動調整する Range("A:D").EntireColumn.AutoFit MsgBox Sheets("DATA").Name & "にファイル名一覧を作成しました。" & Chr(13) & _ "変名に必要ないファイル名があれば削除してください。" End Sub ’----------------------------------- Office 2021,Windows_11

  • ExcelVBAでファイルを開くフォルダ指定方法

    ExcelのVBAを用いて実験データのcsvファイルをまとめるプログラムを書いています. 肝心のプログラムはほぼできています. しかし OpenfileName = Application.GetOpenFilename("CSVファイル,*.csv?") としたときに開かれるフォルダ(ファイルを指定するフォルダ)がカレントフォルダ?となっております. 実行するExcel(VBA入り)と実験データが下記のパスにあったとして C:\Users\ABC\Documents\Data\110302\ カレントフォルダはなぜかマイドキュメントがデフォルトになってしまいます. C:\Users\ABC\Documents\ 階層移動できるので問題なくもないのですが,一々階層移動するのも面倒なので修正したいと考えております. そこで (1)プログラム実行直前にカレントフォルダを実行するExcel(VBA入り)の位置に変更する方法 (2)カレントフォルダと関係なく実行するExcel(VBA入り)があるフォルダを開く方法 どちらかで対処できると考えたのですがその方法が見つかりません. (ちなみに実行するExcel(VBA入り)の位置は動かすものとするので絶対パスでの指定はなしとします) どなたかご教授お願いします.

  • ファイルを指定して開きたいのですが…

    フォルダにいくつかのexcelシートがあります。 それをフォームを使ってそれぞれ呼び出すようにしたいのですが、 カレントディレクトリにあるはずなのに、3回に1回は「ファイルが見つかりません」となり、開けないことがあります。 そこで、先にカレントディレクトリを取得して、その取得した値をもとにフルパス指定するなどして、ファイルを開くようにしたいのですが、できそうでできません。 ちなみに、C:~などとあらかじめ設定してしまうと、コレを利用する複数のユーザがいるのですが、それぞれパスが異なっているために、個人用にパスを書き直さなければならなくなってしまうので、上記の方法を思いつきました。 最悪ネットワーク上に必要なデータ(フォルダ)を置き、そこを開くようにすれば?とも思ったのですが動作が重くなってしまうので、なるべくならやりたくありません。 どなたかお力を拝借できませんでしょうか。

専門家に質問してみよう