• ベストアンサー

エクセル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/17068)
回答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

関連するQ&A

  • 相対パスの指定

    FindFirstFile(), remove(), OPENFILENAME などのファイルやフォルダのパスを扱うものについて、例えば 実行ファイルと同じディレクトリに有るdat.datというファイルを「dat.dat」とだけ書いて相対指定したつもりが、実行ファイルと同じディレクトリにdat.datが無かった場合にWindowsフォルダなどの特殊なフォルダや、AUTOEXEC.BATに書いてあるフォルダを使ってdat.datが検索されて適用されたりすることはあるのでしょうか? いろいろな関数や構造体が有りますが、相対パスが指定されたとき、絶対パスを作るために使用されるフォルダパスが、GetCurrentDirectory()以外のものが使われることってあるんでしょうか?

  • 相対パスが使えない

    EXCELのファイルを呼び出したいのですが,絶対パスで e:\vb6.0\book1.xls と指定するとファイルが開くのですが, 相対パスで .\book1.xls と指定するとファイルが開けません。 なぜでしょうか? EXCELのファイルとvbのファイルは同じフォルダ内にあります.

  • CGIからの絶対パス

    こんにちは。 perlのCGIでファイルをオープンする際のパス指定で悩んでいます。 cgiとは別のディレクトリにあるファイルをオープンしたいのですが、 このとき、 open(IN,"/home/XXX/YYY/ZZZ.dat"); というふうに絶対パスでオープンしようとすると、オープンできません。 一方、 open(IN,"../../../home/XXX/YYY/ZZZ.dat"); といった感じに相対パスにすると、オープンできます。 ファイルの場所は/home/XXX/YYY/ZZZ.datで間違いありませんし、 cgiとしてではなく、シェルから直接cgiプログラムを起動すると、 絶対パスでもオープンできます。 これはいったいどういうことが起こっているのでしょうか? ご存知の方、ご解説願えないでしょうか。

    • ベストアンサー
    • CGI
  • 相対パスでExcel Bookのオープン

    こんにちわ。 相対パスでブックをオープンしようとすると、 「オブジェクト変数、またはwithブロック変数が設定されていません。」というエラーが表示されてしまいます。 絶対パス指定だと、正常にオープンできますし、同じ相対パス指定で、ブックのコピー&ペーストもできています。 なぜなのでしょうか?

  • VBAでエクセルからエクセルのファイルを開くには?

    D:\に db1.mdb Book1.xls があります。 db1.mdbのフォームのコマンドボタンをクリックして Book1.xlsを開きたいのですが VBAコードをご教授いただけますか? (マクロではなくVBAコードが知りたいです) エクセルからエクセルのファイルを開くなら Workbooks.Open ファイルのフルパス で出来ました。 ご回答よろしくお願いします。

  • エクセル2010VBA

    エクセル2003VBAを使用して、エクセルブックのOPEN処理を作成していました。 先日、会社パソコンのOFFICEを2003→2010に更新し、動作させてみると、 「ファイルが見つかりません」 と、エラーウィンドウが表示されてしまいました。 ※2003では問題なく動作していました。 ソースは下記のようになっています。 ※エラー部抜粋です。 ------------------------------------------------------------ Private Function GetExcelData(ByVal sFile As String) As Integer On Error GoTo Err Dim xlApp As New Application Dim xlBook As String xlBook = sFile ' 日報ファイル名 xlApp.Workbooks.Open Me.txtNippoPath.Text & sFile '日報Bookを開く ------------------------------------------------------------ sFile:ファイル名が入っています。 Me.txtNippoPath.Text:パス名が入っています。 別途、エクセルで、Workbooks.Open "パス+ファイル名" をコマンドボタンで動作させると、普通に開くのですが・・・。 解決方法が分かる方が入れば、よろしくお願いします。

  • URLは絶対パス、相対パス、ルート相対パス

    WEBサイトを作成する上で、HTML内に使用するURLの記述方法で悩んでいます。 「絶対パス」、「相対パス」、「ルート相対パス」のどれがいいでしょうか。

    • ベストアンサー
    • HTML
  • Excel2010VBAでエラーが出る相対パス指定

     ExcelVBAで,Excel2007と2013で問題無いのに, Excel2010ではエラーが出る相対パス指定について, ご教示を頂けると助かります.  ExcelVBAにて, ○○.dll ファイルを 以下のように宣言して使っています. Private Declare Function LoadTT Lib ".\○○.dll" _ () As Integer  プログラムの中で, ret = LoadTT() を実行すると, Excel 2007では相対パスでの指定で問題無く動作しますが, Excel 2010では相対パスでの指定ではエラー(ファイルが見つからない)"48"が出ます. そこで,相対パス指定をやめて絶対パスに変更すると問題無く動作します.  念のため Excel2013でも試したところ, 2007と同様に,相対パス指定でも問題なく動作しました.  なお,ExcelVBAのファイル「○.xlsm」と「○○.dll」は同じフォルダーに入れています.  また, ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path の実行によるカレントフォルダーの確認も,どのバージョンでも同じに正しく確認出来ています.    因みに,バージョンの違う各Excelは別々のPCでの動作ですが,使用OSは Windows7 Professional 32bit で同じです.  以上のように Excel2010だけ動作が異なります.  とりあえずは絶対パス指定にすれば問題は解消するのですが, Excel2010で特に何か設定したということは無いので気持ち悪く, 原因と思われることでご存じ方がいらしたらご教示を頂けると助かります.  どうぞよろしくお願い致します. ==

  • インクルードパスを相対パスで指定

    Visual C++ 2017を使用したプロジェクト開発で、次のようなディレクトリ構造になっているとします。 root/  └ dev/    └ L1/      ├ L2/      │ ├ L3/      │ │ └ L4/      │ │   └ MyProj(開発用ディレクトリ)      │ └ foo/      │      └ include/ プロジェクトファイルやソースファイルは全てMyProjの直下にあります。 L2と同じ階層にあるincludeディレクトリにあるtest.hをソースファイルにインクルードするために、次のような#include文を記述します。 #include "../../../include/test.h" これで問題なくコンパイルが通ります。 次に、プロジェクトのプロパティの「追加のインクルードディレクトリ」に"../../foo"を追加します。 これは次のようなオプションと解釈されてコンパイラに渡されます。 /I"../../foo" fooというディレクトリのみを参照パスに追加するつもりで、プロジェクトファイルからの相対パスで指定しました。 さてここで#include文を次のように書き換えてみました。 #include "../../include/test.h" これでコンパイルが通るのです。 ソースファイルからtest.hへの相対パスは ../../../include/test.h のはずですが、なぜこれでコンパイルが通るのでしょうか? ちなみに「追加のインクルードディレクトリ」に何も指定しない状態では、includeファイルを開けないと出てコンパイルエラーとなります。 なのでこの設定が影響しているのだとは思いますが。

  • batファイルの相対パス

    batファイルの相対パス あるバッチが相対パスであるファイルを参照しています このバッチファイルを直接起動すれば、正しく参照できますが、 別のディレクトリにいる別のバッチファイルからcallされた場合、 呼び出し先の相対パスではなく、 呼び出し元の相対パスになってしまいファイルを参照できません。 この問題をスマートに解決する方法はありませんか? 例のchild.batからはfile.txtを参照できますが、 parent_1.bat経由の場合、ファイルが見つかりませんとなります。 child.bat の中で、「cd c:\dir_a」を書いて基点を変更すればとりあえずは行けそうですが、可能な限り絶対パスのベタ書きは避けたいです。 宜しくお願いします。 【例】 c:\ | +-dir_a | | | +-child.bat | | | +-file.txt | +-dir_b | | | +-parent_1.bat | +-dir_c | +-parent_2.bat ===== file.txt ===== test-test-test ===== file.txt ===== ===== child.bat ===== type ./file.txt pause ===== child.bat ===== ===== parent_1.bat ===== call c:\dir_a\child.bat ===== parent_1.bat =====

専門家に質問してみよう