エクセルマクロで別ブックをを開く
マクロで別ブックを参照させたいという要望は多いのではないでしょうか。
そして別ブックのフォルダの場所が毎回違うとか、ファイル名がコロコロ変わるなど、毎回マクロ記述変えなきゃいけないの?
とマクロを作成する側の悩みも多いはずです。
ここでは別ブック参照のためのOpenメソッドについて
・ 基本的な記述
・ 毎回マクロを変更する必要をなくすための記述
(マクロ記述できない人でも参照先のフォルダ名、ファイル名が変えられるようにする)
・ よくあるエラー
について記載していきます。
基本的な記述
ワークブックを開くには、workbookコレクションのOpenメソッドを使用します。
◆記述方法
workbooks.open “ファイルパス & ”\” ファイル名(拡張子含む)”
end sub
簡単ですね。
ワークブックをOPENしてください。 ファイルは「ここのパスのこのファイル名です」
という意味合いとなります・
☆ パス(Path)とは?
パソコン内の、ファイルが保存されている場所のことを言います。
厳密には違うかもしれませんが、ディレクトリとも呼ばれたりします。
フォルダの場所 = Path(パス) = Directory(ディレクトリ)
応用編
◆毎回マクロを変更する必要をなくすための記述
私は基本的に、変わる可能性があるパスやファイル名はマクロ内に記述しないことにしています。
どのようにするかというと、マクロ(VBE)に直接書くのではなく、
エクセルのシートに外出し していく書き方となります。
この”ワークブックOpen”の場合は、開きたいファイルの場所、ファイル名が変わる可能性があるので、
ファイルの場所・ファイル名の情報をエクセルシート内に書き込んでおき、マクロでそれを参照します。
具体的には、マクロを記述するワークブック内に一つマクロ専用シートを作成し、
そこにファイルの場所とファイル名を書いておくという方法になります。
”マクロ用”シートを作成し、ファイルの場所、ファイル名を書く欄を作る。
前提として
”マクロ用”シート
A1セルには入力者がわかりやすいように「フォルダ場所」の文言
B1セルにフォルダ場所の記載欄
A2セルには入力者がわかりやすいように「ファイル名」の文言
B2セルにファイル名の記載欄
workbooks.open sheets(“マクロ用”).range(“B1”) & ”\” & sheets(“マクロ用”).range(“B2”)
end sub
※ 変数を使用するとすっきりします。
sub ブックオープン応用変数あり()
dim DataPath
dim DataFN ‘FN = fileNameの意
datapath = sheets(“マクロ用”).range(“B1”)
DataFN = sheets(“マクロ用”).range(“B2”)
workbooks.open datapath & ”\” & DataFN
end sub
ちょっと回りくどい書き方になってはしまいますが、これをやっておくとことでメンテナンスが非常に楽になります。
シート内の情報を修正するだけなので、ファイル名が変わってしまったり、ファイルの場所が変わって
しまったときでもマクロを触れない人、マクロという言葉に拒絶反応が出る人でも修正が可能になります。
※ 注意事項
・ \(¥)を忘れないように。
フォルダ場所とファイル名の間に\(¥)が必要なのですが、これを忘れがちです。
気をつけましょう
・ 拡張子も記載するようにしましょう
ファイル名をコピーした場合など、フォルダオプションの設定で、「登録されている拡張子は表示しない」設定になっていると、拡張子がでてこないためそれでエラーが起きていることがあります。
これも気をつけましょう。
エラー回避
よくあるエラーがこちら。
「実行時エラー’1004′:指定したファイル◯が見つかりません。ファイル名およびファイルの保存場所が正しいかどうか確認してください。」
これは、読んだままですが、指定したものが見つからない場合に出てくるエラーとなります。
・ 原因はその名の通り、「ファイルの場所かファイル名が違っている」ですね。
このエラーを回避(デバッグがでないように)するために、 Dir関数を使用して、対象のファイルがあるかどうかを調べてからOpenメソッドを実行 するようにしています。
dim DataPath
dim DataFN
datapath = sheets(“マクロ用”).range(“B1”)
DataFN = sheets(“マクロ用”).range(“B2”)
if dir(datapath & “\” & DataFN) = “” then
msgbox “対象ファイルが見つかりません。処理を中止します”
exit sub
else
workbooks.open datapath & ”\” & DataFN
endif
end sub
dir(ディレクトリ)関数とは、指定したファイルが存在した時に、そのファイル名を返してくれる関数です。
ファイルがあればファイル名を、ファイルがなければブランクが返ってきます。 ◆Exit subについて
exit sub はマクロを終了したいときに記載します。
作成例での記述は
・ ファイルが存在しなければ(if dir(datapath & “\” & DataFN) = “” then)
・ マクロを終了する(exit sub)
・ そうじゃなかったら(else)
・ ファイルを開く(workbooks.open datapath & ”\” & DataFN)
・ 。(endif)
という意味になります。
エラー回避の考え方として利用できると思いますので是非参考にしてみてください。