マンガでよめる痔のこと・薬のこと

フォルダ(A)の中にエクセルファイルが(a,b)2つあります。aのファイルに下記のマクロを組んで、ボタンにマクロを貼り付けます。マクロでbのファイルを開きたいのですが、ファイルが見つかりませんとなってしまいます。フォルダ(A)は場所を移動して使う予定です。うまく動かなくて困っております。ご教授よろしくお願い致します。
Sub CCC()
 
s_PathCheck
 
Workbooks.Open Filename:=myWBPath & "b.xls"

Sheets("P").Select
Range("a11").Select

End Sub


Sub s_PathCheck()

Dim n As Variant

myWBPath = Workbooks(1).Path
myWBName = Workbooks(1).Name

n = InStr(myWBName, ".xls")
myWBNameF = Left(myWBName, n - 1)
End Sub

A 回答 (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

'----------------------------------------
    • good
    • 0
この回答へのお礼

参考になりました

お礼日時:2010/08/06 10:16

> こうでした。


> Sheets("P").Range("A11").Select

このような記述は、ダメですよ!!

質問されている方の方が、正しいかと・・・
    • good
    • 0

ANo.5間違えました。


こうでした。


Sub CCC()
  Workbooks.Open Filename:=ThisWorkbook.Path & "\b.xls"
  Sheets("P").Range("A11").Select
End Sub
    • good
    • 0

Sub CCC()



  Workbooks.Open Filename:=ThisWorkbook.Path & "\b.xls"

End Sub



CCCはこれでいいのでは?
    • good
    • 0

>Sub CCC()


 
>s_PathCheck

'正しくパスを含むファイル名が取得されているか確認すれば
MsgBox myWBPath & "b.xls"

>Workbooks.Open Filename:=myWBPath & "b.xls"
    • good
    • 0

試しにやってみましたら開けました。



おそらく、ファイルbの名前か拡張子に問題があるのでは?
ファイルbの名前をフォルダの中を見る画面で
「b」ではなく「b.xls」にしてみてください。
    • good
    • 0

>Workbooks.Open Filename:=myWBPath & "b.xls"


Workbooks.Open Filename:=myWBPath & "\b.xls"
    • good
    • 0

myWBPathとmyWBNameがモジュール変数かパブリック変数としてちゃんと宣言されていると言う前提ですが、以下の様に変更すれば動きませんか?



Workbooks.Open Filename:=myWBPath & "b.xls"

Workbooks.Open Filename:=myWBPath & "\b.xls"
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング