ユーザー配下のパスはパソコンによって変わります。
ユーザー配下のパスはユーザー名が入り、いちいち指定するのは面倒です。
そこでCreateObject(“Wscript.Shell”)を利用して、パソコンが持っている変数からパスを取得してみましょう。
まずは、ファイル参照が必要です。
[ツール] から [参照設定] ⇒「Microsoft Scripting Runtime」にチェックを入れましょう。
取得方法
wshell = CreateObject("Wscript.Shell")'windowsのシェルオブジェクトを生成 mypath = wshell.SpecialFolders("MyDocuments")'SpecialFoldersプロパティでユーザーのマイドキュメントへのパスを取得
mypathは「C:\Users\[ユーザー名]\Documents」となります。
SpecialFoldersの引数は以下のようになります。(ユーザーに関する物だけ抜粋)
Desktop | ログインユーザーのデスクトップ |
AppData | ログインユーザーのアプリ用データ |
PrintHood | ログインユーザーのプリンタ |
Templates | ログインユーザーの新規作成のテンプレート |
NetHood | ログインユーザーのネットワーク |
Desktop | ログインユーザーのデスクトップ |
StartMenu | ログインユーザーのスタートメニュー |
SendTo | ログインユーザーの送る |
Recent | ログインユーザーの最近使ったファイル |
Startup | ログインユーザーのスタートアップ |
Favorites | ログインユーザーのお気に入り |
MyDocuments | ログインユーザーのマイドキュメント |
Programs | ログインユーザーのプログラムメニュー |
と、ここで困ることも出てきます。
プロパティになりフォルダーを取りたい場合です。
私が困ったのはダウンロードフォルダです。
ダウンロードフォルダは普通に開くと「PC\ダウンロード」となっています。
これは仮のパスで本当はユーザーフォルダ配下に存在しています。
「C:\Users\[ユーザー名]\Downloads」となります。
これを取得したいのでVBA上で置換をしてみます。
wshell = CreateObject("Wscript.Shell")'windowsのシェルオブジェクトを生成 mypath = wshell.SpecialFolders("MyDocuments")'SpecialFoldersプロパティでユーザーのマイドキュメントへのパスを取得 mydownload = Replace(Path, "\Documents", "\Downloads", 1, 1)
mydownloadは「C:\Users\[ユーザー名]\Downloads」となります。
ただ、この置換だと「C:\Users\Documents\Documents」
というユーザフォルダがある場合は最初のほうが置換されてしまいます。
かなり特殊なケースだとは思いますが、完璧にしたい場合は「RegExp
」を使って正規表現で置換したほうがよろしいかと思います。
RegExp
は別の機会で説明したいと思います。
この方法は他にもVBA側でユーザーごとにフォルダを作成したい時などでも必要な取得方法だと思います。
コメント