Windows Script Hostを使ってデスクトップのパスを取得する

スポンサーリンク

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

コメントをどうぞ!

タイトルとURLをコピーしました