Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


731 / 13645 ツリー ←次へ | 前へ→

【78661】SetCurrentDirectoryでネットワーク上のディレクトリをカレントリにしたい アソビン 16/12/9(金) 14:24 質問[未読]
【78662】Re:SetCurrentDirectoryでネットワーク上の... 亀マスター 16/12/9(金) 21:28 発言[未読]
【78663】Re:SetCurrentDirectoryでネットワーク上の... アソビン 16/12/12(月) 9:17 発言[未読]
【78664】Re:SetCurrentDirectoryでネットワーク上の... 亀マスター 16/12/12(月) 19:48 発言[未読]
【78678】Re:SetCurrentDirectoryでネットワーク上の... アソビン 16/12/16(金) 12:19 お礼[未読]

【78661】SetCurrentDirectoryでネットワーク上の...
質問  アソビン  - 16/12/9(金) 14:24 -

引用なし
パスワード
   初めてお世話になります。
タイトルの通り、SetCurrentDirectoryでネットワーク上のディレクトリをカレントリにしたいと思っています。
APIを使用しているのですが、ネットワークの"ある階層"にまでしか辿り着けません。

パケットキャプチャしてみた所、IPアドレスが、"ある階層"から先で変わってしまっています。
調べてみたところではサーバのクラスタリングというものが行われているようなのですが、こういったサーバ構成の場合
SetCurrentDirectoryではカレントの変更はできないのでしょうか。
変更出来るギリギリの所をカレントにしておいてGetOpenfilenameのダイアログで自分で階層を進んでいけばファイル
を選択することは出来るのですが、階層が深かったりディレクトリが沢山あったりして誰にでも目的のファイルがすぐに
開けるとは言い難いので、出来るだけ目的のファイルがあるディレクトリをカレントにしておきたいのです。
解決方法がありましたらご教示下さい。よろしくお願い致します。
ソースを書いておきます。

Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal CurrentDir As String) As Long
Option Explicit

Sub LifeTime_FilePath()
  Dim Fpath As String
  Dim myFile As Variant
  
  'Fpath = "\\xx.○○○.co.jp\fss2-g$\01037\vlyk\Process\" '←本当はここをカレントにしたい
  Fpath = "\\xx.○○○.co.jp\fss2-g$\"           '←ここまでなら開ける

  'ファイル選択ダイアログ
  SetCurrentDirectory (Fpath)
  myFile = Application.GetOpenFilename(FileFilter:="エクセルファイル, *.xls", MultiSelect:=True)

End Sub

【78662】Re:SetCurrentDirectoryでネットワーク上...
発言  亀マスター  - 16/12/9(金) 21:28 -

引用なし
パスワード
   本来設定したいディレクトリでSetCurrentDirectoryした後、指定したところと違うパスがカレントディレクトリになっているということでしょうか、それとも、SetCurrentDirectory自体がエラーになるということでしょうか。

指定したディレクトリにアクセス権限がないとか…いうことはなさそうですね、手動でそこまで辿れるようですし。

SetCurrentDirectoryが機能しない理由はよくわかりませんが、代替手段としてWindows Scripting HostのCurrentDirectoryプロパティを試してみてはどうでしょうか。

CreateObject("WScript.Shell").CurrentDirectory = "ディレクトリパス"

で同じことができるはずです。

ネットワーク関連の知識が乏しいので、サーバーの設定の問題が原因でしたらトンチンカンなことを言ってるかもしれませんが…。

【78663】Re:SetCurrentDirectoryでネットワーク上...
発言  アソビン  - 16/12/12(月) 9:17 -

引用なし
パスワード
   ▼亀マスター さん:
お返事ありがとうございます。こちらからのお返事が遅くなりまして申し訳ありません。

>本来設定したいディレクトリでSetCurrentDirectoryした後、指定したところと違うパスがカレントディレクトリになっているということでしょうか、それとも、SetCurrentDirectory自体がエラーになるということでしょうか。

説明が足りず申し訳ありません。
私のソースで言うと、
「Fpath = "\\xx.○○○.co.jp\fss2-g$\"  '←ここまでなら開ける」
このパスを設定している時は確かにこのディレクトリがカレントになります。
しかし、ソース上でコメントアウトしている、
「'Fpath = "\\xx.○○○.co.jp\fss2-g$\01037\vlyk\Process\" '←本当はここをカレントにしたい」
を設定すると、その前にカレントになっているディレクトリが表示されます。
例えばうまく動いてくれないので色々と試していたとして、一つ前に試しにデスクトップをカレントに設定してみた場合等は、上記の設定をしても前回同様にデスクトップがカレントとして開いてしまいます。


>指定したディレクトリにアクセス権限がないとか…いうことはなさそうですね、手動でそこまで辿れるようですし。

はい。手動では辿り着きますのでアクセス権限の問題はありません。


>SetCurrentDirectoryが機能しない理由はよくわかりませんが、代替手段としてWindows Scripting HostのCurrentDirectoryプロパティを試してみてはどうでしょうか。
>
>CreateObject("WScript.Shell").CurrentDirectory = "ディレクトリパス"
>
>で同じことができるはずです。

試してみました。すると「実行時エラー'70': 書き込みできません。」のエラーが出ます。
ソース上で「ここまでなら開ける」となっているパスを設定するとこちらは正しくカレントに設定されますのでやはりクラスタリングされているサーバには辿り着けないということでしょうか。
ちなみに、書き込みできませんのエラーが出たウィンドウでヘルプを見ると「アクセスが拒否されました(エラー70)」という項目が開くので、これは明らかにアクセス拒否されているということですよね…

何か方法はないのでしょうか…うーん…

【78664】Re:SetCurrentDirectoryでネットワーク上...
発言  亀マスター  - 16/12/12(月) 19:48 -

引用なし
パスワード
   カレントディレクトリを移動させたいというのは、ファイル選択のダイアログで最初に表示されるディレクトリを指定したいということですよね。
これまでの経過からして、アクセス権自体が怪しいので上手くいかない可能性が高い気がしますが、FileDialogオブジェクトも試してみてはどうでしょうか。


'Microsoft Office ○○ Object Libraryの参照設定があるなら不要
'○○はOfficeのバージョンによる数字
Const msoFileDialogOpen As Long = 1

With Application.FileDialog(msoFileDialogOpen)
  With .Filters
    .Clear
    .Add "Excel ファイル", "*.xls; *.xlsx", 1 '拡張子は必要に応じて変えてください
  End With
  .InitialFileName = "任意のディレクトリパス" '(例 \\ServerName\Sample\")
  If .Show Then
    .Execute
  End If
End With

【78678】Re:SetCurrentDirectoryでネットワーク上...
お礼  アソビン  - 16/12/16(金) 12:19 -

引用なし
パスワード
   ▼亀マスター さん:

お返事が遅くなりまして申し訳ありません(レスが付いてもメールでの通知が来なかったもので…)。
ありがとうございます!FileDialogオブジェクトの方法を試してみた所、目的のディレクトリが表示されました!
と言ってもこれをカレントにするにはどうしたらいいのかまだイマイチわかっていないのですが、大きな前進だと思います。
これをヒントに自分で頑張ってみたいと思います。
大変お世話になりました!どうもありがとうございました!


>カレントディレクトリを移動させたいというのは、ファイル選択のダイアログで最初に表示されるディレクトリを指定したいということですよね。
>これまでの経過からして、アクセス権自体が怪しいので上手くいかない可能性が高い気がしますが、FileDialogオブジェクトも試してみてはどうでしょうか。
>
>
>'Microsoft Office ○○ Object Libraryの参照設定があるなら不要
>'○○はOfficeのバージョンによる数字
>Const msoFileDialogOpen As Long = 1
>
>With Application.FileDialog(msoFileDialogOpen)
>  With .Filters
>    .Clear
>    .Add "Excel ファイル", "*.xls; *.xlsx", 1 '拡張子は必要に応じて変えてください
>  End With
>  .InitialFileName = "任意のディレクトリパス" '(例 \\ServerName\Sample\")
>  If .Show Then
>    .Execute
>  End If
>End With

731 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free