教えて!ExcelVBA!

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

【ExcelVBA API操作】マッピング接続を切断(WNetCancelConnection)する方法を教えて!

       f:id:m_kbou:20200417220821p:plain

マッピング接続を切断するWindowsAPI関数(WNetCancelConnection)について説明します。

 

【目次】

 

構文

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

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

API定義)

Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" (ByVal lpszName As String, ByVal bForce As Long) As Long

VBA記述)

WNetCancelConnectionlpszName bForce

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

[説明]:

マッピング接続を切断するWindowsAPI関数はWNetCancelConnection関数となります。VBAから呼び出して使用する場合には、Declareステートメントによる
Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" (ByVal lpszName As String, ByVal bForce As Long) As Long」をプロシージャの外で宣言します。引数であるlpszNameには切断するドライブを指定し、bForceには切断しようとしているドライブで開いているファイルやジョブが存在する場合に切断するか否かを指定します。指定には「True」と
「False」があり、Trueを指定すると開いているファイルやジョブが存在する場合でも強制的に切断し、Falseを指定すると開いているファイルやジョブが存在する場合にはエラーとなります。WNetCancelConnection関数を実行すると戻り値が返ります。戻り値一覧を以下に添付しておきますので、参考にして下さい。

f:id:m_kbou:20200325094905p:plain

 

使い方

開いているファイルやジョブが存在する場合でも強制的に切断する方法

開いているファイルやジョブが存在する場合でも強制的に切断する方法について説明します。

[記述例]:

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

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

Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" (ByVal lpszName As String, ByVal bForce As Long) As Long

 

Sub サンプル()

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

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

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

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

[処理②]:WNetCancelConnection(WindowsAPI関数)によるマッピング接続の切断
WindowsAPI関数であるWNetCancelConnectionを使用したマッピング接続の切断となります。切断するドライブには「"Z:"」を指定し、開いているファイルやジョブが存在しても強制的に切断するため「True」を指定します。正常にマッピングがされると変数:戻り値には「0」がセットされて”正常に接続されました。”が表示されます。また、エラーの場合は「0以外」がセットされて”エラーがあります。”が表示されます。

[実行例]:

マッピングが強制的に切断され、戻り値:0で”正常に接続されました。”が表示されます。

f:id:m_kbou:20200324111557p:plain

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

(実行前)

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

f:id:m_kbou:20200325094707p:plain

(実行後)

※Zドライブが切断されました。

f:id:m_kbou:20200325094720p:plain

WindowsAPIを使用した開いているファイルやジョブが存在する場合でも強制的に切断する方法についての説明は以上です。

 

開いているファイルやジョブが存在する場合にはエラー表示にする方法

開いているファイルやジョブが存在する場合にはエラー表示にする方法について説明します。

[記述例]:

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

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

Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" (ByVal lpszName As String, ByVal bForce As Long) As Long

 

Sub サンプル()

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

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

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

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

[処理②]:WNetCancelConnection(WindowsAPI関数)によるマッピング接続の切断
WindowsAPI関数であるWNetCancelConnectionを使用したマッピング接続の切断となります。切断するドライブには「"Z:"」を指定し、開いているファイルやジョブが存在した場合にはエラーメッセージを表示する「False」を指定します。正常にマッピングがされると変数:戻り値には「0」がセットされて”正常に接続されました。”が表示されます。また、エラーの場合は「0以外」がセットされて”エラーがあります。”が表示されます。

[実行例]:

※今回は切断するドライブよりファイルを開いたままの状態で処理を実行したため、戻り値:2401で”エラーがあります。”が表示されました。

f:id:m_kbou:20200325094736p:plain

WindowsAPIを使用した開いているファイルやジョブが存在する場合にはエラー表示にする方法についての説明は以上です。

 

おわりに

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