• ベストアンサー

エクセルVBAで相対パスでファイルを読み込めない

こんにちは。 標題の通りです。 現在、エクセルのVBAを使用してちょっとしたものを作成しているのですが、 相対パスを使用して他のファイル(DATファイル)を読みこませようとしています。 しかし、どうにもうまくいかなかったのです。 最初は問題なく読み込めていましたが、あるとき突然パスが見つかりませんとの エラーメッセージが出るようになりました。 結局、開いているブックの絶対パスを取得するという方法にして思っている結果 は得られることができましたが、どうにも不思議なので質問しました。 コードは以下のように記述していました。 Open "..\ディレクトリ\ファイル.dat" For Input As #1 上記ではだめなのでしょうか? VBでは問題なかったような気がします。

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

  • ベストアンサー
noname#11157
noname#11157
回答No.1

相対指定はカレントフォルダから始まります。 デフォルトでは「C:\My Documents」になってるはずですが。 「ツール」→「オプション」 「全般」タブ カレントフォルダ名 で、指定します。

kkk194
質問者

お礼

ありがとうございます。 カレントフォルダが指定されていたのですか。 今確認しました。 でも普通はデフォルトのカレントフォルダなんて指定されてませんよね? エクセルだけなのでしょうか? ということは今作っているブックだけをファイルサーバ上に置いて共有しよう と思っていたのですが、エクセル自体でカレントフォルダが指定されているの では普通に相対パスを切ってもだめですね。 結局ActiveWorkbook.pathでブック自体の絶対パスを取得する方法にしています。

その他の回答 (2)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

こんにちは。 そのマクロを含むブックのパスなら、単純に下記で取れますが、、、(但し、一度でも保存済みならばです。) そんなに単純じゃないかな? Sub Test1()  MsgBox ThisWorkbook.Path  MsgBox ThisWorkbook.FullName  MsgBox Dir(ThisWorkbook.FullName) End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

ファイルを掴まえる点に関して、下記を検討して役立てられませんか。小生最近調べたもので。 感じるものがなければ、忘れてください。 (1)Dirの利用 Sub test01() On Error GoTo p02 Worksheets("sheet1").Activate i = 1 MsgBox Dir("c:\My Documents\") p01: Cells(i, 1) = Dir() i = i + 1 GoTo p01 p02: MsgBox "終わり" End Sub (2)CommonDialogのShowOpen の利用 (3)GetOpenFilenameの利用 Sub test02() Dim objXL, temp, opFilter, opTitle opFilter = "データベース,*.mdb,テキスト,*.txt, 全て,*.*" opTitle = "タイトル"   Set objXL = CreateObject("Excel.Application") temp = objXL.GetOpenFilename(opFilter, , opTitle) objXL.Quit If temp <> False Then Path1 = temp End Sub