プロが教えるわが家の防犯対策術!

ActiveWorkbook.Pathでパス名を取得して、
同じフォルダ内の別のエクセルシートを開きたいのですが、
見つかりませんと、エラーになります。

ただしそのエクセルを直接開いて名前を付けて同名で上書き保存をすると
取得できるようになるのですが、

すべて閉じて、再度実行すると、また取得できなくなるという現象が起こっているのですが
毎回上書き保存するわけにいかない為
何かよい方法はありますでしょうか?

-----------------------------------
Dim strPath As String
Dim strBookName As String

strPath = ActiveWorkbook.Path
strBookName = Dir(strPath & "\管理簿.xlsm") 'ファイル名取得

On Error GoTo myError

Workbooks.Open FileName:=strBookName

A 回答 (2件)

管理簿.xlsmファイルは実在しますか?拡張子がxlsxだったりxlsだったりしませんか?



'Pathで\記号を連結する場合は、.を前置すると良いですよ。
strBookName = Dir(strPath & ".\" & ActiveWorkbook.Name) 'ファイル名を取得する試験
で動作するはずですよね。

> strPath = ActiveWorkbook.Path
は、想定どおりの値を取得できてますか?MsgBoxか、Debug.Printで確認できます。
    • good
    • 2
この回答へのお礼

ファイルも実在し、MsgBoxでパスの名前もファイル名も確認したところ、
ちゃんと、パスもファイル名も持ってきていましたが、
やはり、エラーになってしまい、
原因がよくわからないので、
直接フルパスを書き込む方法に変更しました。
回答ありがとうございました。またよろしくお願いします。

お礼日時:2012/10/12 10:01

こんにちは。

お邪魔します。
ちょっと気になっていたのですが、
 ActiveWorkbook

 Dir()関数
の使い方は意図に合っているものでしょうか。
ThisWorkbook に換えて、Dir()関数にワイルドカード付けてみたら、
よく見かけるニーズの多い記述だったりするのですけれど。
とりあえず、自Bookの在るフォルダにある".xlsm"ファイルを
総なめにしてイミディエイトウィンドウ
(VBE画面から、Ctrl + G キーを押すとアクティブになるウィンドウのことです)
に表示するものを揚げてみます。
一度、確認した方がよいかと思いましたので。

Sub Re7742919chk()
  Dim strPath As String
  Dim strPathName As String
  Dim strBookName As String
  
  strPath = ThisWorkbook.Path
  strPathName = strPath & "\*.xlsm"
  strBookName = Dir(strPathName)
  Debug.Print strPathName: Debug.Print , strBookName
  Do While strBookName <> ""
    Debug.Print , strBookName
    strBookName = Dir()
  Loop
End Sub

次いで、
  strPathName = strPath & "\*.xlsm"
を、
  strPathName = strPath & "\管理簿*.xlsm"
  strPathName = strPath & "\*管理簿.xlsm"
  strPathName = strPath & "\*管理簿*.xlsm"
などに代えて試してみては如何でしょう。

> ただしそのエクセルを直接開いて名前を付けて同名で上書き保存をすると
> 取得できるようになるのですが、
元コードについては、
実行する度に、アクティブなブックが異なっていたとして
それぞれが異なるフォルダにあるブックだった場合に、
見かけ上、同じような現象が再現できますので、
その確認、ということです。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています