必要は成功の母です。
エクセルのファイルの入っているフォルダをコピーします。
すると、一つのエクセルのファイルから見て、リンク関係は、
1.同じフォルダにあるエクセルのファイルからのリンクは正しくコピーされます。
2.違うフォルダに入っているエクセルファイルからのリンクは正しく引き継がれません。ここで正しく引き継がれないとは、前の一群のフォルダにリンクが張られたままだということです。違う見方でいうと、リンク元のフォルダまでコピーしたのにフォルダ外からのリンクは、もとのフォルダのままだということです。これをフォルダガイストというといった笑われましたが…。
これを直すには、リンク先を新しくコピーしたフォルダのパスに置き換える必要がです。
【概 略 図】

簡単です。一つ一つのエクセルファイルを開いて、一つのシートごとに置換えをしていき続ければいいのです。
簡単ですが、面倒です。
今まで紹介した機能では、複数語の置換えというのがありました(第20回)。
これは複数の文字列の置換えを作成しておき、そのセルを指定し、さらに置き換え範囲を指定して(同一シート)、置換えを行うものです。
この機能を拡大し、
1.ファイル内のすべてのシートに対して置換えを行う。
2.フォルダ内のすべてのエクセルファイルのすべてのシートに対して置換えを行う。
とするものです。
手順としても機能としても、原型を含めて三つのものを作成しておくのがいいでしょう。
すなわち、
1.シート内の指定した範囲内に対して置換えを行う。
2.ファイル内のすべてのシートに対して置換えを行う。
3.フォルダ内のすべてのエクセルファイルのすべてのシートに対して置換えを行う。
という機能となります。
2は簡単です。1の機能をシートごとに処理することにすればいいのです。for to文でシートの数だけ繰り返せばいいのです。
問題(気をつけるべき点は)は、二つあります。
1.ワークシートだけにするのかグラフのシートを対象にするのか
=⇒グラフシートでは置換えは効かないと思われるのでワークシートだけに限定する
2.処理が終了したとき、複数置換え語が書かれているシート(実行時のシートのこと)に処理を移すにはどうするか
基本事項を次に書いておきます。
ワークシートだけを処理する
For j = 1 To Worksheets.Count 'グラフを入れる場合は To Sheets.Count
Worksheets(j).Select
ワークシートの全部のセルを指定
Cells.Select
シート番号を取得しそのシートを指定する
ii0 = Sheets.Index
Sheets(ii0).Select
後の機能は第20回を参照してください。
フォルダ内のエクセルファイルへの対応は次回にします。

0 件のコメント:
コメントを投稿