• ベストアンサー

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

  • VBA ファイルを開くダイアログでの初期表示にファイルサーバーを指定

    こんにちは、Excelでマクロを組んでいます。ネットワークにファイルサーバーのNasを利用しているのですが、ファイルを開くダイアログで初期表示されるディレクトリをNasのフォルダに指定したいと思っています。 ChDir "\\Nas\最初に開きたいフォルダ" Application.GetOpenFilename で指定しても、なぜかローカルのマイドキュメントが開かれてしまいます。ローカルのマイドキュメントはカレントディレクトリに設定されていますが、例えば ChDir "C:\テストフォルダ名"としてから Application.GetOpenFilename とすると、きちんとテストフォルダ名が最初に表示されます。Nasへの接続の問題でしょうか?でも、Nasへログオンするにはユーザー名やパスワードを指定するはずなので、ログオンしていなかった場合はそれを聞いてくると思われるのですが・・・いかがでしょう?パスが間違っていたら、パスが間違っていますというエラーメッセージになると思いますし、、、よろしくお願いします。

  • Access VBAでファイルのインポートについて

    あるディレクトリにAccessのmdbファイルを置き、「インポート」フォルダを隣に置きます。 このフォルダ内にCSVファイルを置き、それをVBAでテーブル「tbl_import」にインポートさせたいのです。 ちなみにインポート後はディレクトリ「インポート」下層のディレクトリ「インポート済」に移動させたいのです。 下記例文では「file.csv」と書いていますが、このファイル名はインポートの都度、常に変わります。 インポートさせるファイルは常に一つです。 「*」を用いれば出来ると思っていたのですが、うまくいきません。 良い方法を教示いただけませんか。 DoCmd.RunSQL "DELETE * FROM tbl_import" DoCmd.TransferText acImportDelim, "インポート定義", "tbl_import", CurrentProject.Path & "\インポート\file.csv", True FileCopy CurrentProject.Path & "\インポート\file.csv", CurrentProject.Path & "\インポート\インポート済\file.csv" Kill CurrentProject.Path & "\インポート\file.csv"

  • ExcelVBAでファイルを開くフォルダ指定方法

    ExcelのVBAを用いて実験データのcsvファイルをまとめるプログラムを書いています. 肝心のプログラムはほぼできています. しかし OpenfileName = Application.GetOpenFilename("CSVファイル,*.csv?") としたときに開かれるフォルダ(ファイルを指定するフォルダ)がカレントフォルダ?となっております. 実行するExcel(VBA入り)と実験データが下記のパスにあったとして C:\Users\ABC\Documents\Data\110302\ カレントフォルダはなぜかマイドキュメントがデフォルトになってしまいます. C:\Users\ABC\Documents\ 階層移動できるので問題なくもないのですが,一々階層移動するのも面倒なので修正したいと考えております. そこで (1)プログラム実行直前にカレントフォルダを実行するExcel(VBA入り)の位置に変更する方法 (2)カレントフォルダと関係なく実行するExcel(VBA入り)があるフォルダを開く方法 どちらかで対処できると考えたのですがその方法が見つかりません. (ちなみに実行するExcel(VBA入り)の位置は動かすものとするので絶対パスでの指定はなしとします) どなたかご教授お願いします.

  • ファイルを指定して開きたいのですが…

    フォルダにいくつかのexcelシートがあります。 それをフォームを使ってそれぞれ呼び出すようにしたいのですが、 カレントディレクトリにあるはずなのに、3回に1回は「ファイルが見つかりません」となり、開けないことがあります。 そこで、先にカレントディレクトリを取得して、その取得した値をもとにフルパス指定するなどして、ファイルを開くようにしたいのですが、できそうでできません。 ちなみに、C:~などとあらかじめ設定してしまうと、コレを利用する複数のユーザがいるのですが、それぞれパスが異なっているために、個人用にパスを書き直さなければならなくなってしまうので、上記の方法を思いつきました。 最悪ネットワーク上に必要なデータ(フォルダ)を置き、そこを開くようにすれば?とも思ったのですが動作が重くなってしまうので、なるべくならやりたくありません。 どなたかお力を拝借できませんでしょうか。

  • VBA で EXCELファイルをインポート

    VBAに詳しい方お助けください。VBAを使用して、データベースをつかってインポート(データベースファイルを開かずにデータの取り込み)を行いたいのですが良く分かりません。データベースは一つはCSVファイル、一つはXLSファイルです。取り込み先のEXCELファイルのSHEET1にCSVファイルのデータベース(SHEET1)、取り込み先のEXCELファイルのSHEET2にXLSファイルファイルのデータベース(SHEET1)とインポートするにはどのようなVBAの記述が必要ですか?色々と調べているのですがうまく行きません。EXCELは2003を使用しています。

  • cvs..ファイルxls.ファイル

    おはよう御座います。宝くじのデータベースをエクセルで作っています。「宝くじNews Pro」というシェアソフトのデータをCVS.ファイルで出力できるので、私のエクセルで作ったファイルとくっつけたいですのですが、.cvsファイルを出力する際に出力先(参照)のマイドキュメントの中に.XLSファイルがないです。デスクトップの舞いドキュメントの中にはちゃんと含まれているのに。「ファイル名を指定してを検索する」をやってもちゃんとマイドキュメントの中に入ってます。いったい如何したらよいでしょうか?

  • ACCESS VBAでのインポート

    アクセスでエクセルのファイルをインポートするVBAを書いています。 まず、フォルダ内のファイル名を全て取得してコンボボックスで表示します。 そのコンボボックスからインポートするファイルを選択し、インポートします。 ところが、インポートしようとすると「実行時エラー'3011'」となり、オブジェクトが見つかりませんとなってしまいます。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "氏名順_仮", Me.shimei_folder.Value & "\06.6.1氏名順.xls", True このように記述するとキチンとインポートするのですが、 path = Me.shimei_folder.Value & "\" & CStr(Me.shimei_combo.Value) DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "氏名順_仮", path, True これだと3011エラーになってしまうのです。 エラー表示が「オブジェクト"06.6.16氏名順$"が見つかりません」となるのですが、.xlsが$になってしまうのが原因??とも思います。 コンボボックス上は「06.6.16氏名順.xls」と表示されているし、デバッグしてみてもMe.shimei_combo.Valueは「06.6.16氏名順.xls」なのですが・・・。 どなたか、解決方法がわかれば教えて下さい。 ちなみにACCESS、EXCELともに2000です。

  • EXCEL VBA 親ディレクトリの参照方法

    教えてください。 下記のフォルダとファイルがあります。 C:\........\main\DIR\excel1.xls c:\........\main\dir2\excel2.CSV \mainの下にDIR,DIR2がありますが、常に\mainの場所は不定です。 DIRの下にあるEXCEL1.xlsにあるブックにマクロ記述をして、 EXCEL2.CSVを書き出すマクロを書きたいのですが・・・ ActiveWorkbook.pathにてディレクトリは参照できるのですが、 簡単にこの親のディレクトリを参照できる方法はないでしょうか?

  • 【2003】VBA 別ファイル特定シートへのコピペ

    下に書いてあるようなことをしたいのですが、勉強するのも初めてで 現段階の自分の知識ではどうにもなりません。 一応、自力でできたのはフォルダ内の.xlsファイルがなくなるまですべて開くというとこだけでしょうか・・・ お手数かけますが、ご教授お願いします。 参照するシートやファイルは既に存在しているものとします。 <固定値> C:\blue\red\ 'ここをカレントディレクトリと呼ぶ C:\yellow         '集計ファイルはこのディレクトリに置いてある' C:\yellow\集計_2011.xls <ファイル配置> カレントディレクトリ配下にはデータファイルがn個入っている。 1_data.xls 2_data.xls 3_data.xls ・ ・ <数字>_data.xls ◆マクロの動作内容 (1)C:\yellow\集計_2011.xlsが開かれていない場合はファイルを開き 既に開いている場合は(2)へ進む。 (2)カレントディレクトリ配下の*_data.xlsファイルを開く (3)開いたファイルのシート名「Second」を開き、セルC5を参照する (4)下記の通り分岐する((3)の結果) C5=one ならば yellow\集計_2011.xlsのシート名「English」を選択 C5=eins ならば yellow\集計_2011.xlsのシート名「German」を選択 C5=un ならば yellow\集計_2011.xlsのシート名「French」を選択 (5)dataファイルのA6を起点とし、下記の範囲をコピーする 行:A6~(上から数えて最後に空白でないセルA*) 列:A列からZ列まで →A6:Z*の範囲をコピー(これを#とする) (6) #をyellow\集計_2011.xlsに追記形式でコピペする →(4)で選択したシートに貼り付ける →貼り付けるセルは、B10を上から数えて最初に空白のセルを起点として、#を貼り付ける (7)開いていたdataファイルを閉じる (8) カレントディレクトリのdataファイルがすべてに(2)から(7)を繰り返す

  • エクセルファイルを開こうとしたらい??なエラー。困っております

    最近まで使用できていたエクセルファイルが使用できなくなりました。 場所は マイドキュメントの中ん○○○フォルダです。 エクセルファイルをクリックすると ファイル ”C:¥My Documents\○○○¥エクセルファイルの名前.xls"(またはその構成ファイル)が見つかりません。パスおよびファイル名が正しいか、必要なライブラリがすべて利用可能かどうか、確認してください。 というエラーがでるのです。ファイルが壊れているのかと思いそのファイルを、エクセルを新規に開きそこからファイルとして開くと、開くこと開く事が出来るのです。 誰かこのような症状で、心当たりがあるという方おしえてください。 困っております。。。。