• ベストアンサー

TransferSpreadsheetでフルパス指定しない場合

Access2003 WinXP (ADO)です。 テーブルをExcelへエクスポートするのですが DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "テーブル名", "ほにゃらら" と書いたらデスクトップに新規にExcelブックが出来上がっていて、内容もエクスポートされていました。 ブックの名前は”ほにゃらら”です。 既存のブックではなく新規のブックに吐きたかったので良いのですが、本当はエクスポート先のブックをフルパスで指定するのですよね? このままでは何か弊害が出ますでしょうか?

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

  • ベストアンサー
  • yu_tang
  • ベストアンサー率81% (26/32)
回答No.2

> このままでは何か弊害が出ますでしょうか? その危険性が高いですね。 出力先のディレクトリを明示的に指定しない場合は、カレント ディレクトリが使用されます。 カレント ディレクトリはアプリケーション個別に設定を保持できないため、どのタイミングでどこから変更されるかまったく予測できません。 A さんの環境ではデスクトップに出力されるかもしれないし、B さんの環境ではマイ ドキュメントに出力されるかもしれません。 たとえば A さんの環境で1回目はデスクトップに出力されたとします。 途中で割り込みの仕事を片付けることになって、Excel であるファイルに名前をつけてマイ ドキュメントに保存したとします。これだけで、カレント ディレクトリがマイ ドキュメントに変更されてしまいます。これが Excel でなくメモ帳でもペイントでも IE だったとしても一緒です。 A さんが割り込みの仕事を終えて Access に戻り、再度出力したときには、デスクトップには出力されません。直前の作業でカレント ディレクトリが変更されているという認識が A さんに無ければ、どこを探せばいいのか途方に暮れるかもしれません。 ファイルの出力先は固定にするか、さもなくばユーザーに任せた方がベターではないでしょうか。 たとえば DoCmd.TransferSpreadsheet ではなく DoCmd.OutputTo を使えば、ファイルに名前を付けて保存ダイアログを自動で表示して、ユーザーが選ぶ任意のディレクトリに出力することができます。

yuky-4126
質問者

お礼

回答ありがとうございます。色々試してみましたら、確かにデスクトップだったりc:\tempだったり・・・これではだめです。 ダイアログを出してユーザーに保存先を促す事にします。 ありがとうございました!

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 >このままでは何か弊害が出ますでしょうか? 弊害自体はないけれど、デスクトップ以外ですと、たぶん探すと思います。 もし、デスクトップなら、デスクトップを明示的に決めたほうがよいと思います。 しかし、私なら、このようにして、ファイルと同じ場所に出力させる方法が分かりやすいですね。デスクトップにあまり多く出すと、結構、間違いで立ち上げることがありますから。 Dim strFileName As String  strFileName = CurrentProject.Path & "\ほにゃらら"  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "TestTable", strFileName, False

yuky-4126
質問者

お礼

回答ありがとうございます。 未保存のファイル名なので同じ場所に…は出来なかったのですが CurrentProject.Path &は他で使えそうです。 デスクトップはいっぱいになる人が多いですから、やめた方が良いですね。 ありがとうございました!

関連するQ&A