【VBA】ネットワークドライブを指定したドライブに割り当てる

VBAで「ネットワークドライブを指定したドライブに割り当てる」方法です
「Declare Function」で「Windows API」を定義します
「Windows API」は、WindowsのC言語関数をVBから呼び出すインターフェースです

Windows API 呼び出し定義

標準モジュールに下記のコードを記述します
「Windows API」の部分です
dllとリンクさせる記述です
マクロボタンクリックイベントと同じモジュールに記述する場合はPublicではなくPrivateで良いです

Option Explicit

'ネットワークリソースに接続する関数
Public Declare Function WNetAddConnection2 Lib "mpr.dll" _
    Alias "WNetAddConnection2A" _
   (lpNetResource As tagNETRESOURCE, _
    ByVal lpPassword As String, _
    ByVal lpUserName As String, _
    ByVal dwFlags As Long) As Long

'リソースの詳細を示すデータ型
Public Type tagNETRESOURCE
    dwScope       As Long
    dwType        As Long
    dwDisplayType As Long
    dwUsage       As Long
    lpLocalName   As String
    lpRemoteName  As String
    lpComment     As String
    lpProvider    As String
End Type

Public Const NO_ERROR = 0
Public Const CONNECT_UPDATE_PROFILE = &H1
Public Const RESOURCETYPE_DISK = &H1
Public Const RESOURCE_GLOBALNET = &H2
Public Const RESOURCEDISPLAYTYPE_SHARE = &H3
Public Const RESOURCEUSAGE_CONNECTABLE = &H1

ネットワークドライブの割当て

標準モジュールに定義したものを使ってネットワークドライブを割り当てします
シートにマクロのコマンドボタンを追加し呼び出しします
下の例では、ネットワークドライブをローカルの「X」ドライブに割り当てします

Sub ボタン1_Click()
    Dim udtNetResource As tagNETRESOURCE
    Dim lngReturn      As Long
    Dim strPassword    As String
    Dim strUserName    As String

    'リソースの詳細を設定
    With udtNetResource
        .dwScope = RESOURCE_GLOBALNET
        'リソースの種類
        .dwType = RESOURCETYPE_DISK
        'ローカルデバイスの名前
        .lpLocalName = "X:"
        'ネットワークリソースの共有名
        .lpRemoteName = "\\test\aaa\bbb"
    End With
    
    'ネットワークリソースに接続
    lngReturn = WNetAddConnection2(udtNetResource, _
                                  strPassword, _
                                  strUserName, _
                                  CONNECT_UPDATE_PROFILE)
    
    '接続に失敗した場合はメッセージボックスを表示
    If lngReturn <> NO_ERROR Then
        MsgBox "接続に失敗しました。"
    End If
End Sub

VBA,プログラム

Posted by こっぷ