こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Openメソッドについて

ブックAのSheet1にあるセルのデータをブックBのSheet1のセルにコピーするために、以下のようにOpenメソッドを使ったVBAを記述してみたのですが、エラーコード1004「指定されたファイルが存在しません」のようなエラーメッセージが出てきました。Openメソッドが使われている例を見ているとどうやらブックのあるフォルダを指定しているような感じがするのですが、Openメソッドは具体的に該当のブックのある場所を指定しなくてはならないのでしょうか??(私がVBAを記述するにあたり参考にしたインターネットのVBAを紹介するページでは、ブックのある場所を指定せず、私が記述したように直にブック名を入力していました。)
お忙しい中申し訳ないのですが、どなたかご教授いただけると、とても嬉しいです!よろしくお願いいたします。

Sub ブックAのデータをブックBに()

With Workbooks.Open("ブックA.xlsx")
 .Sheets("Sheet1").Range("E8").Value = _
ThisWorkbook.Range("C2").Value
End With

End Sub

投稿日時 - 2017-08-23 20:33:10

QNo.9366413

困ってます

質問者が選んだベストアンサー

こんんちは。

> With Workbooks.Open("ブックA.xlsx")
>  .Sheets("Sheet1").Range("E8").Value = _
> ThisWorkbook.Range("C2").Value
> End With

のように、
フォルダパスを省略しても期待通りの結果が得られる
事の方がレアケースと考えた方がいいです。
具体的には、
 「開こうとしているブック」

 「マクロが記載されたブック=ThisWorkbook」※
とが
 「同一のフォルダにある場合」※
にのみ、
 "Workbooks オブジェクトの .Open メソッド"
の引数'FileName'については、フォルダパスを省略可能、
ということです。

※厳密には、引数'FileName'のフォルダパスを省略した場合は、
Excelからみたカレントディレクトリ(※可変)内にあるファイル
を参照して開こうとする、ということになります。

従って、開こうとするブックが、
ThisWorkbookの存在するフォルダ(正しくははカレントディレクトリ)
とは異なるフォルダに存在する場合には、
正しくフォルダパスを指定する必要があります。
  With Workbooks.Open("C:\Users\UserName\Documents\ブックA.xlsx")
とか、
  With Workbooks.Open("D:\MyExcelBooks\ブックA.xlsx")
とかのように。

省略可能とはいっても、カレントディレクトリ自体が変更可能ですので、
「開こうとしているブックとマクロが記載されたブックとが
 同一のフォルダにある場合で省略可能」であっても、業務上は、
省略することに不確実さを抱えることになりますから、
  With Workbooks.Open(ThisWorkbook.Path & "\" & "ブックA.xlsx")
のような形で、半絶対的な参照を指す書き方が奨められます。

> Openメソッド
用語の省略には注意して下さい。
"Workbooks オブジェクトの .Open メソッド"
です。
"Open メソッド"は、多数のオブジェクト・クラスに用意された
よくある名前です。
同じ名前の地名が沢山存在するのと同じくらい、
属性を示さないと混乱の元に(伝わり難く)なります。
ついでに、
"Visual Basic" と ご質問の"Excel VBA" とは、これも
似て非なるものですので、
"Excel VBA"の質問であることを明示して質問するようにするか、
『Excel(エクセル)』カテゴリで質問するか、のどちらか、
また、ご質問の内容はご使用の環境によって回答内容が変わる
可能性があるテーマですので、
ご使用のOS、ExcelまたはOfficeのバージョンを明示して
質問するのがベター(解答が得られ易い)です。
以上、次にご質問なさる時に留意してみてください。

> ?(私がVBAを記述するにあたり参考にした
> インターネットのVBAを紹介するページでは、
> ブックのある場所を指定せず、
> 私が記述したように直にブック名を入力していました。)
前後の文脈、例示された動作条件、など、
よく読んでみないと何とも言えないですけれど、
なんの説明もなく、唐突に"これで大丈夫"と書いてあるのなら、
かなり怪しい解説と言わざるを得ません、です。
ただ、今日のようにファイルを保存するフォルダを
ユーザーが積極的に選択することが当たり前になる、
よりも昔の、当時の常識に副って無駄を省いて解り易く
易しく教えてくれていたようなサイトでは、
ありがちな親切、だったかも知れませんね。

"Workbooks オブジェクトの .Open メソッド"に限らず、
VBAにも限らず、
ファイルをファイル名だけを頼りに直接開く場合には、
努めて絶対的な参照を心掛けるのが今日的には好まれる、かと。

実は、ご提示の記述についても、
それが標準モジュールに記されたものであるならば、
他にも省略可能な部分(With ブロック)があります。
そっちは絶対的に参照しているのに、
フォルダパスは省略している、というのは、
なんだかアンバランス(歪)な印象でもあります。

無論、間違いが起こらない、という確信があるのなら、
積極的に省略したっていいのが、VBAマクロ、だと思いますが、
ご質問のような点で疑問を持つ間は、
例えば住所を書く時に必ず都道府県(国名?)から書く
ような感覚で、一旦は絶対参照で書けるようにしてから、
今回ご質問のように、
どんな場合に省略可能なのか確認すること、
を押えておくと、ご自身で選んで書けるようになって吉、
と思いますです。以上です。

投稿日時 - 2017-08-25 02:50:18

お礼

非常に丁寧な解説いただき、ありがとうございます!なるほど…同じ場所にある場合のみフォルダの場所などは省略が可能なのですね!(;゜Д゜)ブックはデータを扱う人によって移動させたりもするので、データはこれからなるべく同じブック内の別シートに貼り付けすることにします!
また、カテゴリ違いもご指摘いただきありがとうございました!

投稿日時 - 2017-08-26 13:14:59

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問