Accessからテキストファイルをエクスポートするとき、エクスポート先をどのように指定していますか?
和休の場合、次のコードで、そのAccessファイルが存在するフォルダに出力するようにしています。
Sub Sample1() Dim strTgTFLD As String '出力先フォルダのパス strTgTFLD = Application.CurrentProject.Path & "\" 'CSVファイルを出力 DoCmd.TransferText acExportDelim, "定義名", "テーブル名", strTgTFLD End Sub
市販されているアプリであれば、出力先を選択するダイアログが表示されて、出力先を選ぶような場面ですが、残念ながらAccessには、ファイルの保存先を問うダイアログの機能はありません。
さらに、AccessVBAでは、以前「参照設定を使用せずにアクセスでファイル選択ダイアログを使うには」で和休が紹介した手法を使っても、ファイルの保存先として使用することはできません。
Application.FileDialogに、msoFileDialogSaveAs を指定することができないのです。
非公開オブジェクトである「WizHookオブジェクト」を使用すれば解決するのですが、もう少し簡単にできる方法を探してみました。
出力先はデスクトップでOK、なんですが、、、
和休が作ったAccessファイルで作業をする人に聞いてみると、出力先は、デスクトップが都合がいいとのこと。
Windows10における各ユーザーのデスクトップのパスは、
C:\Users\「サインインしているユーザー名」\Desktop
です。
ユーザーがwaqであれば、C:\Users\waq\Desktop となるわけですね。
で、このユーザーのデスクトップのフォルダのパスを調べることが、VBAではできません。
ただ、強引にやるなら、Environ関数を使って、次のコードで取得することができます。
Sub Sample2() Dim strTgTFLD As String '出力先フォルダのパス strTgTFLD = Environ("USERPROFILE") & "\desktop\" 'イミディエイトウィンドウにデスクトップのパスを出力 Debug.Print strTgTFLD End Sub
また、Windowsのバージョンによって、デスクトップへのパスは変わります。
例えば、WindowsXPのデスクトップのパスは、C:\Documents and Settings\「サインインしているユーザ名」\デスクトップ でした。
パソコンの環境に左右されるようでは、使い勝手が良いとは言えません。
そこで、確実にデスクトップへのパスを取得する方法をご紹介します。
Windows Script Hostを使ってデスクトップのパスを取得する
Windows Script Host(ウインドウズ・スクリプト・ホスト)とは、Microsoft Windowsにおいてテキストファイルに記述したスクリプトを実行するスクリプト実行環境である。WSHと略される。かつてはWindows Scripting Hostと称した。
ウィキペディアから引用しました。
Windows Script Host(以下、「WSH」といいます。)にコードを記述することで、パソコンを自動的に動かすことができるのです。
WSHの機能をVBAから利用して、確実にデスクトップへのパスを取得することができます。
以下のコードを、標準モジュールに記述してください。
Function GET_DesktopPATH() As String Dim wsh As Object Set wsh = CreateObject("WScript.Shell") GET_DesktopPATH = wsh.SpecialFolders("Desktop") End Function
デスクトップへのパスを使用したいときは、次のように使用します。
Sub Sample3() Dim strTgTFLD As String '出力先フォルダのパス strTgTFLD = GET_DesktopPATH & "\" 'デスクトップへのパスを指定 'CSVファイルをデスクトップへ出力 DoCmd.TransferText acExportDelim, "定義名", "テーブル名", strTgTFLD End Sub
コメントをどうぞ!