VBA技術解説
WshNetwork(ネットワークドライブの割り当て等)

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2025-04-09 最終更新日:2025-04-09

WshNetwork(ネットワークドライブの割り当て等)


WshNetworkは、「Windows Script Host Runtime Library」に含まれているオブジェクトで、ネットワーク リソースへのアクセスが提供されています。
ここでは、WshNetworkの主なプロパティとメソッドの簡単な使い方をサンプルVBAとともに解説します。


Windowsシステムを管理するためのインターフェイスであるWMIも参考になると思います。
VBAでWMIの使い方について
・WMIを調べるときの推奨サイト ・VBAでのWMI使用方法 ・WMIにはどんなものがあるのか

本記事作成では以下のサイトを参考にしました。

Windows Script Host Runtime Library

参照設定

参照設定するライブラリは、
Windows Script Host Object Model

VBA マクロ WshNetwork ネットワークドライブの割り当て等


Windows Script Host Runtime Libraryのメンバー

Member 説明
Drive 特定のディスク ドライブまたはネットワーク共有のプロパティへのアクセスを提供します。
Drives 使用可能なすべてのDriveオブジェクトで構成されるDrivesコレクションを返します。
File ファイルのすべてのプロパティへのアクセスを提供します。
Files Folder オブジェクト内の File オブジェクトのコレクション。
FileSystemObject コンピュータのファイル システムへのアクセスを提供するオブジェクト。
Folder フォルダーのすべてのプロパティへのアクセスを提供します。
Folders Folder オブジェクト内の Folder オブジェクトのコレクション。
TextStream ファイルへの順次アクセスを容易にします。
WshCollection WshNetwork.EnumNetworkDrivesメソッドとWshNetwork.EnumPrinterConnectionsメソッドによって返されます。
ネットワークドライブ/プリンターのローカル名とそれに関連付けられた UNC 名のペアを関連付けるコレクションです。
コレクション内の偶数番号の項目はドライブ/プリンターポートのローカル名を表し、奇数番号の項目は UNC 名を表します。
WshEnvironment Windows 環境変数のコレクションへのアクセスを提供します。
WshExec WshShell.Execメソッドによって返されます。スクリプトのステータスとエラー情報を提供します。
WshNetwork コンピュータが接続されているネットワーク上の共有リソースへのアクセスを提供します。
WshShell ネイティブ Windows シェルへのアクセスを提供します。
WshShortcut プログラムでショートカットを作成できます。
WshURLShortcut プログラムによってインターネット リソースへのショートカットを作成できます。

WshNetwork以外については、以下では解説していません。


VBAでのWshNetworkの使い方

事前バインディング

参照設定
Windows Script Host Object Model

VBA変数宣言方法
Dim wsh As New IWshRuntimeLibrary.WshNetwork

Dim wsh As IWshRuntimeLibrary.WshNetwork
Set wsh = New IWshRuntimeLibrary.WshNetwork

With New IWshRuntimeLibrary.WshNetwork
  '・・・
End With

遅延(実行時)バインディング

VBA変数宣言方法
Dim wsh As Object
Set wsh = CreateObject("WScript.Network")

With CreateObject("WScript.Network")
  '・・・
End With

WshNetworkのプロパティ

プロパティ 説明
ComputerName コンピューター名
UserDomain ユーザードメイン名
UserName ユーザー名

WshNetworkのプロパティ

メソッド 説明
AddWindowsPrinterConnection プリンター接続をシステムに追加します。
AddPrinterConnection MS-DOS ベースのプリンタ接続を追加します。
EnumNetworkDrives ネットワーク ドライブ マッピング情報を返します。
EnumPrinterConnections ネットワーク プリンターのマッピング情報を返します。
MapNetworkDrive 共有ネットワーク ドライブを追加します。
RemoveNetworkDrive 共有ネットワーク ドライブを削除します。
RemovePrinterConnection 共有ネットワーク プリンタ接続を削除します。
SetDefaultPrinter 既定のプリンターを変更します。


WshNetworkの簡易な使用例

ユーザー名、コンピュータ名

Sub UserName_ComputerName()
  Dim wsh As IWshRuntimeLibrary.WshNetwork
  Set wsh = New IWshRuntimeLibrary.WshNetwork
  With wsh
    MsgBox "ユーザー名:" & .UserName & vbLf & _
        "コンピュータ名:" & .ComputerName
  End With
End Sub


プリンターの一覧

Sub PrinterConnections()
  Dim v
  For Each v In CreateObject("WScript.Network").EnumPrinterConnections
    Debug.Print v
  Next
End Sub

上記では、CreateObjectの結果をFor Eachのオブジェクトに直接指定しています。


ネットワークドライブの一覧

Sub NetworkDrives()
  Dim wsh As New IWshRuntimeLibrary.WshNetwork
  Dim v
  For Each v In wsh.EnumNetworkDrives
    Debug.Print v
  Next
End Sub


ネットワークドライブの割り当てと解除

MapNetworkDrive

object.MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword])

引数 説明
object WshNetworkオブジェクト
strLocalName マップするドライブがローカルで認識される名前を示す文字列値。
strRemoteName 共有の UNC 名 (\\xxx\yyy) を示す文字列値。
bUpdateProfile オプション。
マッピング情報が現在のユーザーのプロファイルに保存されるかどうかを示すブール値。
bUpdateProfile が指定され、その値が true の場合、マッピングはユーザー プロファイルに保存されます (デフォルトはfalse)。
strUser オプション。
ユーザー名を示す文字列値。
現在のユーザー以外の資格情報を使用してネットワーク ドライブをマッピングする場合は、この引数を指定する必要があります。
strPassword オプション。
ユーザー パスワードを示す文字列値。
現在のユーザー以外の資格情報を使用してネットワーク ドライブをマッピングする場合は、この引数を指定する必要があります。

RemoveNetworkDrive

object.RemoveNetworkDrive(strName, [bForce], [bUpdateProfile])

引数 説明
object WshNetworkオブジェクト
strName 削除するマップされたドライブの名前を示す文字列値。strNameパラメータは、ドライブのマップ方法に応じて、ローカル名またはリモート名のいずれかになります。
bForce オプション。
マップされたドライブを強制的に削除するかどうかを示すブール値。
bForce が true の場合、このメソッドはリソースが使用されているかどうかに関係なく接続を削除します。
bUpdateProfile オプション。
ユーザーのプロファイルからマッピングを削除するかどうかを示す文字列値。
bUpdateProfile が true の場合、このマッピングはユーザー プロファイルから削除されます。
bUpdateProfileはデフォルトではfalseです。

VBAサンプル

Sub NetworkDrive()
  Dim sDrive As String: sDrive = "Z:"
  Dim sPath As String: sPath = "\\xxxxxx\yyyyyy"
  Dim sUser As String: sUser = "userを記載"
  Dim sPass As String: sPass = "passを記載"
  
  Dim wsh As Object
  Set wsh = CreateObject("WScript.Network")
  Dim objFSO As Object
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  
  '既存ドライブの確認と解除
  If objFSO.DriveExists(sDrive) Then
    Call wsh.RemoveNetworkDrive(sDrive, True, True)
  End If
  
  'ネットワークドライブの割り当て
  On Error Resume Next
  Call wsh.MapNetworkDrive(sDrive, sPath, False, sUser, sPass)
  If Err.Number <> 0 Then 'ドライブの割り当てに失敗
    MsgBox Err.Description
  End If
  
  'オブジェクトの開放
  Set wsh = Nothing
  Set objFSO = Nothing
End Sub




同じテーマ「マクロVBA技術解説」の記事

VBAで正規表現を利用する(RegExp)
VBAでメール送信する(CDO:Microsoft Collaboration Data Objects)
VBAでのOutlook自動操作
ADO(ActiveX Data Objects)の使い方の要点
特殊フォルダの取得(WScript.Shell,SpecialFolders)
参照設定、CreateObject、オブジェクト式の一覧
VBAのスクレイピングを簡単楽にしてくれるSelenium
VBA+SeleniumBasicで検索順位チェッカー作成
VBA+SeleniumBasicで検索順位チェッカー(改)
.Net FrameworkのSystem.Collectionsを利用
WshNetwork(ネットワークドライブの割り当て等)


新着記事NEW ・・・新着記事一覧を見る

WshNetwork(ネットワークドライブの割り当て等)|VBA技術解説(2025-04-09)
TRANSLATE関数(翻訳) DETECTLANGUAGE関数(言語識別)|エクセル入門(2025-04-08)
QRコード、バーコード作成の覚え書き|エクセル関数応用(2025-04-05)
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ひらがな⇔カタカナの変換|エクセル基本操作
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ