| すぐマク YNxv918 | Home | Search | Contents | Gallery | Introduction | Service | Support | What's New! |
| ドライブ指定を簡単に変えれないか? |
|
|
|||||
|
このホームページの更新をいつも楽しみにしています。おかげさまで、マクロがほんの少しですが理解できるようになりました。 Cドライブで使用していたファイルを、別のパソコンのAドライブ等に移動した場合などでは、アドレスを書き換えなければいけないのでしょうか? 何かよい方法があれば教えていただけませんか。 |
|
|||
|
ハードディスクの起動ドライブの名は、DOS/V機では通常 'C' ですが絶対ではありません。一部メーカーのパソコンでは、 'A' になる場合があります。また、パーティションを切っていたり、サーバーを使っていたりして、データを別のドライブに保存している場合は、'D' や 'E' になる場合もあるでしょう。このことは、私達マクロを組む者にとっては、少々わずらわしい問題ですが仕方ありませんね。 (注) DOS/V機においても、異なるOS(例えば WindowsMeと Windows2000)をダブルインストールしている場合など、'C' ドライブ以外が起動ドライブになることがありますし、Excelを OSとは別のドライブにインストールしている場合もあり得ます。 マクロの中で別のファイルを開いたり、新しいファイルを保存したりする場合は、必要によりドライブ名・フォルダ名・ファイル名・拡張子などを指定するコードを記述します。例えば、次のとおりです。 '========================================================================================= 10 ChDrive "C" 'カレントドライブを変更する 20 ChDir "\My Documents" 'カレントフォルダを変更する 30 Workbooks.Open Filename:="Book1.xls" 'ブックを開く '=========================================================================================ご質問は、上記サンプルの10行目の "C" の部分を書き換えなければいけないかどうかを お尋ねと思います。回答としては、上記のようにマクロコードを固定的表現で記述している場合は、書き換えが必要になります。 愛想のない回答になってしまいましたので、 『ドライブ名が変ってもマクロを書き換えなくてよい方法』を考えてみましょう。 A案: 変数で指定する方法 まず、10行目の "C" の部分を変数で指定するように、下記のように変えます。次に 8行目として、変数「ドライブ」に "C" をセットするコードを追加します。 8 ドライブ = "C" '変数「ドライブ」に値をセットする 10 ChDrive ドライブ 'カレントドライブを変更する大して変らないように思えるかも知れませんが、この方法はマクロに柔軟性を持たせるための基本です。 その理由は、 (1) 10行目と同じ記述がマクロ全体のあちこちにある場合でも、8行目だけ書き換えれば済みます。 (2) 8行目の変数「ドライブ」に、自動的に値をセットする方法へ発展できます。 B案: ドライブ名を入力してもらう方法 ユーザーにドライブ名を入力してもらう方法です。マクロは簡単に済みますが、ユーザーに負担が掛かります。8行目を次のように書きます。
8 ドライブ = InputBox("ドライブ名を入力してください")
10 ChDrive ドライブ 'カレントドライブを変更する
C案: EXCELへのパスを利用する方法現在のアプリケーション(Excel)へのパスを取得して、その中のドライブ名でセットします。Excelがインストールされているドライブと、データ用のドライブが同じならば、この方法が使えます。
'=========================================================================================
Sub EXCELへのパスでカレントドライブを設定する()
絶対パス = Application.Path '現在のアプリへのパスを取得する
ドライブ = Left(絶対パス, 1) 'ドライブ名を取り出す
ChDrive ドライブ 'カレントドライブを変更する
End Sub
'=========================================================================================
D案: アクティブブックのパスを利用する方法アクティブブックのパスを取得して、その中のドライブ名でセットします。マクロの最初で次のマクロを実行するようにしておきます。なぜ最初かと言うと、アクティブブックのパスは、ブックを開くたびに変る場合があるからです。 なお、ユーザーがブックを開く方法には色々あります。 1) オフィスツールのマイドキュメントから開く、2) Excelを立ち上げておいてから Excelで開く、3) デスクトップのマイコンピュータアイコンから開く、4) エクスプローラから開く、5) [スタート]メニューの[ファイル名を指定して実行]から開く、6) マクロで開くなどですが、いずれの場合でも、次のマクロで正しく処理されるはずです。
'=========================================================================================
Sub アクティブブックのパスでカレントドライブを設定する()
絶対パス = ActiveWorkbook.Path '現在開いているブックのパスを取得する
ドライブ = Left(絶対パス, 1) 'ドライブ名を取り出す
ChDrive ドライブ 'カレントドライブを変更する
End Sub
'=========================================================================================
以上のほかにも色々な方法があるでしょう。パソコン環境は、職場によりユーザーにより様々ですから、フィットする方法を考案しましょう。これも楽しみかも知れませんね。
|
| http://www.geocities.jp/happy_ngi/ | Home | Contents | Gallery | Introduction | Service | Support | What's New! |