GetSpecialFolderメソッド

GetSpecialFolderメソッドは特殊フォルダのパスを取得するメソッドです

'ローカルのTmepフォルダパスの取得
Debug.Print bhFSO.GetSpecialFolder(2)

特殊フォルダのパスを取得するには、「GetSpecialFolder」メソッドを使用します
引数に指定する数値によって取得できるフォルダが変わります

主な使用場面は、Tempフォルダへの一時ファイルの作成やネットワーク上サーバーへのアクセス回数を減らすために一時的にローカルにファイルを保存したりする場合にも利用できます

メソッドの書式

引数(太字は必須引数)
GetSpecialFolder (folderspec)

folderspec」は取得するフォルダの種類の指定になります
必須項目で0~2のどれかを指定します

0はWindowsフォルダ、1はSystemフォルダ、2はTempフォルダをそれぞれ取得します
このメソッドはPC環境によって、絶対パスが変化する部分に動的に対応して確定したフォルダを指定することが出来ることに優位性があります

実行時バインディング全てにおいての注意点ですが、メソッドの引数には定数は使用できません
定数の設定は事前バインディングを行ったときにしか有効ではありません

指定値2は「TemporaryFolder」という定数を指定することで表現されますが、これは実行時バインディングでは使用できないので内部数値の2で指定するようにしてください

実際の使用例

実際にこのメソッドを利用する場面が多いのはTempフォルダの利用時だと思います

Tempフォルダとは、Tempファイルを保存するための専用のフォルダです
Tempファイルとは一時ファイルという、処理中に一時的にデータを退避させたり、記録しておいたりする目的で使用されます

実際別にこのフォルダを使用しなくても、処理のあるブックのパスを利用して相対的に処理する方法でも問題は無いのですが、実務として少し難点がある場合があります
それが前述した、ネットワークサーバー上にブックがある場合です

この場合にブックの保存や、同じ場所に処理で作成したファイルを大量に保存する場合などは保存のたびにサーバーとの交信を行いますので、ネットワーク状況やファイルのサイズ次第では保存待ちにより処理の冗長化が引き起こされます

その場合の解決策として、処理中はいったんローカルに保存して処理を行い
処理が完了してからブックや、処理で作成したファイルを一括でサーバーに移動させます
こうすることでサーバーとのやり取り回数を減らすことが出来るので処理を早めることが出来ます

この方法は、保存に時間がかかればかかるほど有益なので、検討してください
ちなみに、VBAの標準メソッドのブックのCopyメソッドは開いているブックに対してはエラーが発生するので、その場合はFSOのCopyメソッドを使用します

また、これに関連していますが、開いているブックをSQLで読み込みをする場合にもこの一時ファイルの作成が必要になります
ブックでSQLを利用する場合には、開いているブックを使用するとリンク切れを起こすことが多々あります
その場合には、ブックを複製してSQLを接続する必要があります
ブックのSQL操作では、削除などが行えないので複製で十分対応できると思います

FSOでは3つのフォルダを指定することが出来ますが、WScript.Shellを利用すればデスクトップなども取得可能です