- ベストアンサー
ファイルを開くマクロでフォルダ(A)の中のエクセルファイル(b)を開く方法
- フォルダ(A)の中にあるエクセルファイル(b)を開くマクロを作成しましたが、ファイルが見つかりませんとなってしまいます。
- フォルダ(A)は場所を移動して使う予定で、マクロがうまく動かないため困っています。
- フォルダ(A)内のエクセルファイル(b)を正しく開く方法について教えてください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 このコードでつまづくようでしたら、サブルーチン化は避けたほうがよいと思います。 もちろん、モジュールレベル変数などが分かっていらっしゃるなら良いのですが……。 今回は、サブルーチンで、明示的に渡すようにさせました。 > myWBPath = Workbooks(1).Path & "\" ' > myWBName = Workbooks(1).Name それから、この部分は、上手くありません。ただ、現在、与えられた情報からでは変更出来ませんが、せいぜい、ActiveWorkbook 程度です。Workbooks(1)というのは、ブックを開いた順番の最初のものという意味です。それを認識してコードを書いていれば問題はありませんが、それは、一定しているとは思えません。ブック名を入れない限りは、ActiveWorkbook やThisWorkbook とか、明確にしたブックを指定したほうがよいです。 サブルーチンは、コードの融通性とメインコードの構造の明確化が目的ですから、あまりきれいにまとまっているとは思えませんが、それはやむを得ないと思います。 (こういう凝ったコードは嫌う人もいるかもしれません。元のコードよりも、ずっとややこしくなっていますから、間違いやすくなってしまいますが、ひとつのサブルーチンの例です。) '------------------------------------------- Sub CCC() Dim myWBPath As String Dim myWBName As String Dim fName As String s_PathCheck myWBPath, myWBName fName = myWBPath & "b.xls" If Dir(fName) = "" Then MsgBox "ファイルが見つかりません。", vbExclamation: Exit Sub With Workbooks.Open(Filename:=fName) Application.Goto .Worksheets("P").Range("A11") End With End Sub Sub s_PathCheck(myWBPath As String, myWBName As String) Dim myWBNameF As String Dim n As Integer myWBPath = Workbooks(1).Path & "\" '←明示的にしてください。 myWBNameF = Workbooks(1).Name n = InStr(1, myWBNameF, ".xls", vbTextCompare) 'ピリオドだけなら、テキストコンペアは必要ありません。 myWBName = Left(myWBNameF, n - 1) '←ここは使われていません。 End Sub '----------------------------------------
その他の回答 (7)
- ja7awu
- ベストアンサー率62% (292/464)
> こうでした。 > Sheets("P").Range("A11").Select このような記述は、ダメですよ!! 質問されている方の方が、正しいかと・・・
ANo.5間違えました。 こうでした。 Sub CCC() Workbooks.Open Filename:=ThisWorkbook.Path & "\b.xls" Sheets("P").Range("A11").Select End Sub
Sub CCC() Workbooks.Open Filename:=ThisWorkbook.Path & "\b.xls" End Sub CCCはこれでいいのでは?
- watabe007
- ベストアンサー率62% (476/760)
>Sub CCC() >s_PathCheck '正しくパスを含むファイル名が取得されているか確認すれば MsgBox myWBPath & "b.xls" >Workbooks.Open Filename:=myWBPath & "b.xls"
試しにやってみましたら開けました。 おそらく、ファイルbの名前か拡張子に問題があるのでは? ファイルbの名前をフォルダの中を見る画面で 「b」ではなく「b.xls」にしてみてください。
- watabe007
- ベストアンサー率62% (476/760)
>Workbooks.Open Filename:=myWBPath & "b.xls" Workbooks.Open Filename:=myWBPath & "\b.xls"
- mt2008
- ベストアンサー率52% (885/1701)
myWBPathとmyWBNameがモジュール変数かパブリック変数としてちゃんと宣言されていると言う前提ですが、以下の様に変更すれば動きませんか? Workbooks.Open Filename:=myWBPath & "b.xls" ↓ Workbooks.Open Filename:=myWBPath & "\b.xls"
お礼
参考になりました