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

VBA ネットワーク上のファイルでカレントフォルダを取得するには?

VBA超初心者でネットで色々調べて、ところどころコピーしながらプログラムを作っています。
ローカルのPCでは問題なく動くまでになったのですが、実際にはネットワーク上の共有サーバで実行したいのですが、ネットワーク上ではカレントパスがうまく設定できていないようで、動きません。

CreateObject("WScript.Shell").CurrentDirectory = ThisWorkbook.Path

というコードでVBAが置いてあるフォルダをカレントディレクトリに設定するようにしています。

どのようにしたらネットワークサーバで動くようになりますか?

A 回答 (5件)

WebDAVの環境がないため、関連のありそうな情報をあたってみました。


もしかすると、OSの機能で制限されているかもしれません。

http://heipooh.jugem.jp/?eid=56

VBAではなく、直接手動操作で設定した時にはどうでしょうか?
できないとなると、何らかの環境設定が必要なのではないでしょうか?
上記URLの操作では、エクスプローラからネットワークドライブとして認識させています。

EXCELの機能については、下記URLの「カレントドライブとカレントフォルダ」をご参照ください。
http://officetanaka.net/excel/vba/tips/tips91.htm

現状のネットワーク構成ですと、カレントディレクトリの前に、カレントドライブを認識し得る環境がないと推察されます。

取得する方法について、他もあたってみて、情報が見つかりましたら投稿致します。
    • good
    • 0
この回答へのお礼

お礼が遅れて申し訳ありません。知識が乏しく話についていけてないのですが、「直接手動操作で設定した時・・」というのは「ネットワークドライブの割り当て」のことですか?色々やってみたのですが、自分に割り当てられてるIDとパスワードではできないようなので、管理者に問い合わせてみます。
少なくとも私の環境では、\\~から始まるアドレスではエクスプローラから見れません。

お礼日時:2010/07/07 16:55

「ネットワーク上の共有サーバで実行したい」とのことでしたが、



(1)ファイルが存在しているのも開いて実行しているのも「ネットワーク上の共有サーバ」ですか?

(2)カレントディレクトリを設定するのは、どんな処理のためでしょうか?

ポイントがずれてたらすみません。
ネットワークサーバでどう動かしたいかわかれば、何か情報が提供できるかも知れません。

この回答への補足

(1)はい。そうです。

(2)サーバー上に100以上のフォルダがあり、その100個以上のフォルダそれぞれの中に同じエクセルのファイルを入れています(ファイル名も同じ)。この100を超えるエクセルファイルの中身を同時に修正したり、データを抽出したりするため、VBAファイルがあるディレクトリをカレントに設定して、そこからそれぞれのエクセルファイルまでのパスを相対で記述し、ループ処理をかけようとしています。

相対パスとループ処理をするためのカウンタ変数などは以下のように書いており、ローカルでは問題なく動きますが、サーバーに載せると最初の1行でデバッグがかかってしまいます。

CreateObject("WScript.Shell").CurrentDirectory = ThisWorkbook.Path

Dim strFolderN(1 To 100) As String 'フォルダまでのパス格納用
Dim intCnt As Integer 'カウンタ用変数

  '相対パスの指定
  strFolderN(1) = "..\hogehoge\aaa\"
  strFolderN(2) = "..\hogehoge\bbb\"
      ・
      ・
      ・
      ・

For intCnt = 1 To 100 'カウンタ

  'ここから下はエクセルの修正の処理


確認したところ、やはり通常の共有フォルダではなく、「webdav」というシステムを使って、Webサーバをファイルサーバのようにして利用しているもので、「ThisWorkbook.Path」のところを「"\\コンピュータ名\・・・」にしたり「ChDrive」や「ChDir」ではできませんでした。

http://ja.wikipedia.org/wiki/WebDAV

今回は結局ローカルにコピーして作業をしてしまいましたが、今後のこともあるので、何か解決策がありましたら、教えて頂ければ嬉しいです。

よろしくお願いします。

補足日時:2010/06/24 10:13
    • good
    • 0

以下が参考になるかわかりませんが、



http://www.excel.studio-kazu.jp/kw/2009021916222 …

FTPサーバーへの接続ということでしょうか。
    • good
    • 0
この回答へのお礼

お礼が遅れてすみません。
色々試したのですが方法が見つからず、今回はローカルにコピーして実行しました。
回答ありがとうございました。

お礼日時:2010/06/23 21:56

以下はどうですか。



CreateObject("WScript.Shell").CurrentDirectory = "\\マシン名\D\myDirectory"

この回答への補足

説明が足らずすみません。
\\コンピュータ名 で始まるアドレスではなく、https://~で始まるWebファイルサーバー?なのです。。
この場合どうでしょうか?

補足日時:2010/06/18 20:06
    • good
    • 0

ネットワークドライブの割り当てをすれば


ChDrive
ChDir
で何とかなりそうですが

でなくで、ThisWorkbook.Path が ¥¥~
であれば、

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

Sub test()

Debug.Print CurDir

SetCurrentDirectory (ThisWorkbook.Path)

Debug.Print CurDir

End Sub

しか方法は無さそうですね。

この回答への補足

説明が足らずすみません。
\\コンピュータ名 で始まるアドレスではなく、https://~で始まるWebファイルサーバー?なのです。。
この場合どうでしょうか?

補足日時:2010/06/18 20:07
    • good
    • 0
この回答へのお礼

お礼が遅れてすみません。
色々試したのですが方法が見つからず、今回はローカルにコピーして実行しました。
回答ありがとうございました。

お礼日時:2010/06/23 21:55

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

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


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