• ベストアンサー

ACCESS2000 VBAでのファイル名指定

お世話になります。 先日、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=383826 こちらの質問で、フォームのコマンドボタンからExcelファイルをACCESSテーブルへインポートする方法を教えていただきました。 で、新たに分らないことがでてきました。 回答で教えていただいた参考URLで、ファイル(Excelファイル)を指定するのに >strxls = "C:\My Documents\sample_127.xls" となっておりました。データベースが置いてあるフォルダと同じフォルダを参照したくて、 strxls = "sample_127.xls" とだけ入れてみたんですが(これでカレントディレクトリを見てくれるだろうと思っていたんですが)、実際に動かしてみると、マイドキュメントのフォルダを参照していました。 カレントディレクトリを参照させるには、どうしたらよいでしょうか。 やはり、フルパスを記述するしかないのでしょうか。

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

  • ベストアンサー
  • yoisho
  • ベストアンサー率64% (331/516)
回答No.1

現在開かれているデータベース名のフルパスは CurrentDb の Name プロパティで取得できますので、これからデータベース名を削ってやればカレントディレクトリのパスが取得できると思います。 具体的には例えば、以下のようなコードではいかがでしょうか? Dim strxls as String, strDbName As String, strCurrentDir As String, N As Integer strDbName = CurrentDb.Name N = Len(strDbName) Do Until Mid(strDbName, N, 1) = "\" N = N - 1 Loop strCurrentDir = Left(strDbName, N - 1) strxls = strCurrentDir & "sample_127.xls"

hinebot
質問者

お礼

ありがとうございました。

その他の回答 (3)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

>GetFilePathのFunctionが呼び出されてファイルパスを取得してくるということ >でしょうか? そうです。 ファンクションで取得すればsample_127.xls以外の同一フォルダ内のExcelシート などもファイル名の変更で指定できます。 もしくはボタンなどのイベントに記述すればその都度パスを取得できます。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

単純にstrxls = "sample_127.xls"の指定ではカレントディレクトリを見には行き ません。 Accessのオプションにある既定のデータベースを参照しに行ってしまいます。 フルパスで記述するかプロシジャで開いているMDBのパスを取得し同フォルダ内の sample_127.xlsを参照するかです。 Public Function GetFilePath(FilePath As String) As String Dim strxls as String Dim Temp As String Dim i As Integer Dim LastYenPlace As Integer Do Temp = Right$(FilePath, i) Temp = Left$(Temp, 1) If Temp = "\" Then LastYenPlace = Len(FilePath) - i + 1 GetFilePath = Left$(FilePath, LastYenPlace) End If i = i + 1 Loop Until Len(GetFilePath) > 0 End Function パスを取得しておいてstrxls = GetFilePath & "sample_127.xls"で参照できます。

hinebot
質問者

補足

済みません。 >パスを取得しておいてstrxls = GetFilePath & "sample_127.xls"で参照 これって、GetFilePath の Function をあらかじめ作っておいて、 >strxls = GetFilePath & "sample_127.xls" が実行されるときに、GetFilePath のFunctionが呼び出されてファイルパスを取得してくるということでしょうか? VBA 判っているようでよく判っておりません。

  • yoisho
  • ベストアンサー率64% (331/516)
回答No.2

#1です。 すいません、訂正です。 strCurrentDir = Left(strDbName, N - 1) は、 strCurrentDir = Left(strDbName, N) にしてください。

関連するQ&A