教えて!ExcelVBA!

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

【ExcelVBA API操作】共有フォルダへマッピング(WNetAddConnection)する方法を教えて!

       f:id:m_kbou:20200417220956p:plain

共有フォルダへマッピングするWindowsAPI関数(WNetAddConnection)について説明します。

 

【目次】

 

構文

記述方法は、以下の通りとなります。

=======================================================================

API定義)

Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long

VBA記述)

WNetAddConnectionlpszNetPathlpszPasswordlpszLocalName)

=======================================================================

[説明]:

共有フォルダへマッピングするWindowsAPI関数はWNetAddConnection関数となります。VBAから呼び出して使用する場合には、DeclareステートメントによるDeclare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long」をプロシージャの外で宣言します。引数であるlpszNetPathにはマッピングする共有フォルダのパスを指定し、lpszPasswordには接続に使用するパスワードを指定します。接続に使用するパスワードには通常現在のユーザパスワードを指定しますが、特に指定が無ければ既定パスワードが使われます。更に、引数であるlpszLocalNameには接続するドライブを指定します。WNetAddConnection関数を実行すると戻り値が返ります。戻り値一覧を以下に添付しておきますので、参考にして下さい。

f:id:m_kbou:20200324111539p:plain

 

使い方

正常に共有フォルダへマッピングされる場合

正常に共有フォルダへマッピングされる場合について説明します。

[記述例]:

※以下の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方については、VBEの開き方を参考にして下さい。

-------------------------------------------------

Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long

 

Sub サンプル()

    '↓処理①
    Dim 戻り値 As Long
       
    '↓処理②
    戻り値 = WNetAddConnection("\\10.240.202.83\テスト", "", "Z:")
   
    If (戻り値 = 0) Then
        MsgBox "正常に接続されました。"
    Else
        MsgBox "エラーがあります。", 16, "エラー"
    End If
   
End Sub

-------------------------------------------------

処理の流れは以下の通りとなります。

[処理①]:変数定義
Dimによる戻り値を格納する変数の定義となります。

[処理②]:WNetAddConnection(WindowsAPI関数)による共有フォルダへのマッピング
WindowsAPI関数であるWNetAddConnectionを使用した共有フォルダへのマッピングとなります。マッピングする共有フォルダには「"\\10.240.202.83\テスト"」を指定し、接続に使用するパスワードには既定パスワードをセットするため「””」を指定します。また、接続するドライブはZドライブとするため「Z:」を指定します。正常にマッピングがされると変数:戻り値には「0」がセットされて”正常に接続されました。”が表示されます。また、エラーの場合は「0以外」がセットされて”エラーがあります。”が表示されます。

[実行例]:

※共有フォルダが存在しマッピングが正常に行われたため、戻り値:0で”正常に接続されました。”が表示されます。

f:id:m_kbou:20200324111557p:plain

以下にフォルダの接続状態を添付します。

(実行前)

※Zドライブが接続されていません。

f:id:m_kbou:20200324111610p:plain

(実行後)

※Zドライブが接続されました。

f:id:m_kbou:20200324111622p:plain

WindowsAPIを使用した共有フォルダへ接続する方法(正常)についての説明は以上です。

 

エラーとなり共有フォルダへマッピングされない場合

エラーとなり共有フォルダへマッピングされない場合について説明します。

[記述例]:

※以下の記述例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方については、VBEの開き方を参考にして下さい。

-------------------------------------------------

Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long

 

Sub サンプル()

    '↓処理①
    Dim 戻り値 As Long
       
    '↓処理②
    戻り値 = WNetAddConnection("\\10.20.30.40\テスト", "", "Z:")
   
    If (戻り値 = 0) Then
        MsgBox "正常に接続されました。"
    Else
        MsgBox "エラーがあります。", 16, "エラー"
    End If
   
End Sub

-------------------------------------------------

処理の流れは以下の通りとなります。

[処理①]:変数定義
Dimによる戻り値を格納する変数の定義となります。

[処理②]:WNetAddConnection(WindowsAPI関数)による共有フォルダへのマッピング
WindowsAPI関数であるWNetAddConnectionを使用した共有フォルダへのマッピングとなります。マッピングする共有フォルダには「"\\10.20.30.40\テスト"」を指定し、接続に使用するパスワードには既定パスワードをセットするため「””」を指定します。また、接続するドライブはZドライブとするため「Z:」を指定します。正常にマッピングがされると変数:戻り値に「0」がセットされて”正常に接続されました。”が表示されます。また、エラーの場合は「0以外」がセットされて”エラーがあります。”が表示されます。

[実行例]:

※共有フォルダとして指定した"\\10.20.30.40\テスト"は実在しないため、戻り値:67で”エラーがあります。”表示されます。

f:id:m_kbou:20200324111809p:plain

WindowsAPIを使用した共有フォルダへ接続する方法(エラー)についての説明は以上です。

 

おわりに

今回はWindowsAPI関数による共有フォルダへ接続する方法について説明しました。類似の内容にマッピング接続の切断方法もあります。こちらも是非参考にして下さい。