[[20140825124507]] 『カレントディレクトリの移動(VBA)』(たけたけ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『カレントディレクトリの移動(VBA)』(たけたけ)

一つのエクセルのVBAでchdirを使い、カレントディレクトリを移動させ、別のエクセルを開き、カレントディレクトリを移動させると、最初に開いたエクセルのカレントディレクトリも変更されてしまいます。

ユーザー毎(エクセルファイル毎でも可?)にカレントディレクトリを保持することはできないのでしょうか?

宜しくお願いします。

< 使用 Excel:Excel2003、使用 OS:unknown >


 カレントディレクトリはアプリケーションの属性となる環境なので、ファイルごとには
 もてません。

 VBA であれば、「カレントディレクトリ」を用いない実装を心がけたほうが良いと思います。
 Select するな、という記事が有名ですが、 Chdir するな、というのも同様に回避できるの
 であれば、回避したほうが良い操作でしょう。

 ファイルの扱いにはフルパスを、ファイル・フォルダ選択であれば、引数としてフォルダを
 指定して、環境変数を変更しない方法をまずは検討してはと思います。
http://www.239-programing.com/excel-vba/func/func014_2.html

 今回、 Chdir を使用したい目的は何でしょうか。

(Mook) 2014/08/25(月) 13:09


返信、ありがとうございます。

外部データの取込みでFrom 句にパスがしていされているのですが、ここを変更したいのが目的です。

カレントディレクトリを移動すれば、そこにあるファイルを参照してくれます。
そのため、多数のユーザーで使用するときにカレントディレクトリさえ移動すれば、目的のファイルを参照できます。

vbaでパスを全部変更してしまうのが一番いいのでしょうが、ユーザー毎にカレントディレクトリを変更し、他のユーザーが設定したカレントディレクトリがかわらない方法はないのでしょうか?
(修正の数が多いためカレントディレクトリの変更で対応したい)

サーバーでもそのような事はできないのでしょうか?

(たけたけ) 2014/08/25(月) 13:24


 繰り返しですが、そのようなことは簡単にはできません。
 ファイルごとに環境変数を管理するようなコードを書く必要がありますし、すべての
 EXCEL ファイルにそのようなことを期待するのは、不適切な実装だと思います。

 カレントディレクトリを移動しなくとも、SQL のファイルを絶対パスにするだけだと
 思いますが、問題があるのでしょうか。

 Chdir パス
 sql = "Select * From ファイル名"

 なら
 sql = "Select * From " & パス & "\ファイル名"
 とするだけではないのですか?

 Execl ファイルがある場所からの相対パスであれば、
 sql = "Select * From """ & ThisWorkbook.Path "\DB\ファイル名"""
 など。

(Mook) 2014/08/25(月) 13:34


返信、ありがとうございます。

やはり、カレントディレクトリを動かすことはあまりよくないのですね。

コードを書くことを検討してみます。
(たけたけ) 2014/08/25(月) 14:34


解決しました。

サーバーにリモートデスクトップでユーザー毎にログインするとExcelのカレントフォルダがマイドキュメントになるので、そこの直下にファイルを置いておけば、外部データの取込みでユーザー毎のエクセルファイルから取り込みが可能となりました。

コードを書くことも検討しましたが、なにもせずに対応策がみつかってよかったです。
でも、あまりカレントフォルダを使用するのもよくないこともわかりました。

Mook様、いろいろアドバイスありがとうございました。
(たけたけ) 2014/08/27(水) 10:29


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.