教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA API操作】共有フォルダへ接続(WNetAddConnection2)する方法を教えて!

WNetAddConnection2関数は、WindowsAPIの1つで、ネットワークに接続するために使用されます。ネットワークリソースには、共有フォルダ、プリンタ、Webサイトなどが含まれます。

API宣言

ExcelVBAでは、WNetAddConnection2関数を使用する前にAPI宣言を行う必要があります。API宣言を行うことで、ExcelVBAがWindowsAPI関数を認識することができるようになります。API宣言は次のように行います。

Private Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (ByVal lpNetResource As Any, ByVal lpPassword As Any, ByVal lpUserName As Any, ByVal dwFlags As Long) As Long

解説

パラメータ 内容
Lib 使用する動的リンクライブラリ(DLL)の名前を指定します。ここでは "mpr.dll"となります。
Alias API関数名を指定します。ここでは"WNetAddConnection2A"という関数名が指定されています。

引数については以下の通りです。

引数 内容
lpNetResource 接続先のリソースを指定するための構造体です。この構造体には、接続するリソースの種類(共有フォルダ、プリンタ、Webサイトなど)、接続するリソースの名前、接続するリソースのローカル名などを指定します。構造体を以下で紹介します。
lpPassword 接続先のリソースにアクセスするためのパスワードを指定します。通常はvbNullStringを指定して、パスワードなしで接続します。
lpUserName 接続先のリソースにアクセスするためのユーザー名を指定します。通常はvbNullStringを指定して、ユーザ名なしで接続します。
dwFlags 接続オプションを指定します。接続オプションには、読み取り専用接続、インターネット接続、再接続などがあります。通常は0を指定します。

構造体は以下の通りです。

Type NETRESOURCE
    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

使い方

WNetAddConnection2関数を使用して、ネットワークドライブへの接続を行うには、以下の手順を実行します。

1.接続先のリソースを指定するための構造体を作成します。

Type NETRESOURCE
    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

この構造体には、接続するリソースの種類、接続するリソースの名前、接続するリソースのローカル名などを指定します。例えば、以下のように構造体を作成して、共有フォルダに接続する場合は、dwTypeにRESOURCETYPE_DISK、lpRemoteNameに共有フォルダのパスを指定します。

Dim NetRes As NETRESOURCE
NetRes.dwScope = vbNull
NetRes.dwType = vbNull
NetRes.dwDisplayType = vbNull
NetRes.dwUsage = vbNull
NetRes.lpLocalName = "Z:"
NetRes.lpRemoteName = "\\10.20.30.40\テスト"
NetRes.lpComment = vbNullString
NetRes.lpProvider = vbNullString

2. WNetAddConnection2関数を使用して、接続を行います。

Dim Result As Long
Result = WNetAddConnection2(NetRes, vbNullString, vbNullString, 0)

このようにして、WNetAddConnection2関数を使用して、ネットワークドライブへの接続を行うことができます。接続が成功すると0以外の値を返し、接続に失敗すると0を返します。

プログラミング例

以下のプログラムは、VBAでWNetAddConnection2関数を使用して、ネットワークドライブへの接続を行う例です。この例では、共有フォルダに接続するための構造体を作成し、WNetAddConnection2関数を使用して接続を行います。

Private Type NETRESOURCE
    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

Private Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (ByVal lpNetResource As Any, ByVal lpPassword As Any, ByVal lpUserName As Any, ByVal dwFlags As Long) As Long

Sub ConnectToSharedFolder()
    Dim NetRes As NETRESOURCE
    NetRes.dwScope = vbNull
    NetRes.dwType = vbNull
    NetRes.dwDisplayType = vbNull
    NetRes.dwUsage = vbNull
    NetRes.lpLocalName = "Z:"
    NetRes.lpRemoteName = "\\10.20.30.40\テスト"
    NetRes.lpComment = vbNullString
    NetRes.lpProvider = vbNullString
    Dim Result As Long
    Result = WNetAddConnection2(NetRes, vbNullString, vbNullString, 0)
    If Result <> NO_ERROR Then
      MsgBox "接続に失敗しました。"
    Else
      MsgBox "接続に成功しました。"
    End If
End Sub

このプログラムを実行すると、共有フォルダに接続することができます。接続が成功すると、メッセージボックスに「接続に成功しました。」と表示されます。接続に失敗する場合は、メッセージボックスに「接続に失敗しました。」と表示されます。

まとめ

WNetAddConnection2関数は、ネットワーク接続に関する機能を提供するWindowsAPIの一つで、接続するリソースの種類、名前、ローカル名などを指定することができます。また、接続が成功した場合には0以外の値を返し、接続に失敗した場合には0を返します。これにより接続の成否を判定することができます。WNetAddConnection2関数を使用する際には、接続するリソースの種類や名前、接続に使用するユーザー名やパスワードなどを正確に指定する必要があります。また、接続に失敗した場合には、エラーメッセージを表示するなど、適切なエラーハンドリングを行うことが重要です。