教えて!ExcelVBA!

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

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

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

API宣言

WNetAddConnection2関数を使用するには、Windows APIを宣言する必要があります。以下のように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

このAPI宣言には、4つの引数があります。
●lpNetResource:接続先のリソースを指定するための構造体です。この構造体には、接続するリソースの種類(共有フォルダ、プリンタ、Webサイトなど)、接続するリソースの名前、接続するリソースのローカル名などを指定します。
●lpPassword:接続先のリソースにアクセスするためのパスワードを指定します。パスワードを指定しない場合は、NULLを指定します。
●lpUserName:接続先のリソースにアクセスするためのユーザー名を指定します。ユーザー名を指定しない場合は、NULLを指定します。
●dwFlags:接続オプションを指定します。接続オプションには、読み取り専用接続、インターネット接続、再接続などがあります。

使い方

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

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

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

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

Dim NetRes As NETRESOURCE
NetRes.dwScope = RESOURCE_GLOBALNET
NetRes.dwType = RESOURCETYPE_DISK
NetRes.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
NetRes.dwUsage = RESOURCEUSAGE_CONNECTABLE
NetRes.lpLocalName = "Z:"
NetRes.lpRemoteName = "\server\share"

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

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

このようにして、WNetAddConnection2関数を使用して、ネットワークドライブへの接続を行うことができます。接続が成功すると、関数は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 = RESOURCE_GLOBALNET
  NetRes.dwType = RESOURCETYPE_DISK
  NetRes.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
  NetRes.dwUsage = RESOURCEUSAGE_CONNECTABLE
  NetRes.lpLocalName = "Z:"
  NetRes.lpRemoteName = "\server\share"
  Dim Result As Long
  Result = WNetAddConnection2(NetRes, vbNullString, vbNullString, 0)
  If Result <> NO_ERROR Then
    MsgBox "接続に失敗しました。"
  Else
    MsgBox "接続に成功しました。"
  End If
End Sub

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

まとめ

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