2014年10月25日土曜日

[VBA] ネットワーク ドライブであることを確認する

VBAで、ディスクがネットワーク ドライブであることを確認する方法です

Windows Script Host の EnumNetworkDrives メソッドで、ネットワークドライブのコレクションを得られます。調査したいドライブ名がこのコレクションに含まれていれば、ネットワークドライブです。ローカル ドライブはこのコレクションには含まれません。

今PCが接続しているネットワークドライブの一覧は、コマンドプロンプトから
> net use
で確認できます。EnumNetworkDrives のコレクションはこれと同じ内容になっています。

■ サンプルロジック
' 参照設定:Windows Script Host Object Model
Dim Network As New WshNetwork
Dim Drives As IWshCollection
Set Drives = Network.EnumNetworkDrives

Dim i As Integer
For i = 0 To Drives.Length - 1 Step 2
    ' コレクションの偶数番目
    Debug.Print "論理ドライブのローカル名" & vbTab & Drives.Item(i)
    ' コレクションの奇数番目
    Debug.Print "UNC 共有名" & vbTab & Drives.Item(i + 1)
Next

■ 出力結果(例)
論理ドライブのローカル名 Z:
UNC 共有名 \\fileserver\共有フォルダ

■ 参考資料

EnumNetworkDrives メソッド
http://msdn.microsoft.com/ja-jp/library/cc364403.aspx