- ベストアンサー
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" とだけ入れてみたんですが(これでカレントディレクトリを見てくれるだろうと思っていたんですが)、実際に動かしてみると、マイドキュメントのフォルダを参照していました。 カレントディレクトリを参照させるには、どうしたらよいでしょうか。 やはり、フルパスを記述するしかないのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
現在開かれているデータベース名のフルパスは 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"
その他の回答 (3)
- O_cyan
- ベストアンサー率59% (745/1260)
>GetFilePathのFunctionが呼び出されてファイルパスを取得してくるということ >でしょうか? そうです。 ファンクションで取得すればsample_127.xls以外の同一フォルダ内のExcelシート などもファイル名の変更で指定できます。 もしくはボタンなどのイベントに記述すればその都度パスを取得できます。
- O_cyan
- ベストアンサー率59% (745/1260)
単純に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"で参照できます。
補足
済みません。 >パスを取得しておいてstrxls = GetFilePath & "sample_127.xls"で参照 これって、GetFilePath の Function をあらかじめ作っておいて、 >strxls = GetFilePath & "sample_127.xls" が実行されるときに、GetFilePath のFunctionが呼び出されてファイルパスを取得してくるということでしょうか? VBA 判っているようでよく判っておりません。
- yoisho
- ベストアンサー率64% (331/516)
#1です。 すいません、訂正です。 strCurrentDir = Left(strDbName, N - 1) は、 strCurrentDir = Left(strDbName, N) にしてください。
お礼
ありがとうございました。