教えて!ExcelVBA!

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

【ExcelVBA API操作】共有フォルダを切断(WNetCancelConnection2)する方法を教えて!

f:id:m_kbou:20200417220821p:plain

共有フォルダを切断するWindowsAPI関数(WNetCancelConnection2)について紹介します。

 

 

構文

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

(API定義)

Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long

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

(VBA記述)

WNetCancelConnection2(lpName, dwFlags, fForce)

[説明]:

共有フォルダを切断するAPI関数はWNetCancelConnection2関数となります。VBAから呼び出して使用する場合には、

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

Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long

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

をプロシージャ外で宣言します。

引数であるlpNameには切断するドライブを指定し、dwFlagsには接続タイプを指定し、fForceには接続されているドライブから開いているファイルがある場合の切断方法を指定します。dwFlagsについては固定値で「0」を指定し、fForceについては固定値で「True」を指定します。WNetCancelConnection2関数を実行すると戻り値が返ります。返ってきた戻り値の内容についてはこちらを参考にして下さい。

 

使い方

使用方法について説明します。 

[プログラミング例]:

Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long 

Sub ネットワークドライブの切断()

  '↓処理①
  Dim 戻り値 As Long

  '↓処理②
  戻り値 = WNetCancelConnection2("Z:", 0, True)

  If (戻り値 = 0) Then
    MsgBox "正常に切断されました。(戻り値:" & 戻り値 & ")"
  Else
    MsgBox "エラーがあります。(戻り値:" & 戻り値 & ")", 16, "エラー"
  End If

End Sub

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

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

[処理②]:WNetCancelConnection2による共有フォルダの切断
WindowsAPI関数であるWNetCancelConnection2を使用した共有フォルダの切断となります。各引数には以下の内容をセットして処理を実行します。
・lpName・・・切断するドライブをセットします。
       ※今回は「"Z:"」をセットします。
・dwFlags・・・接続タイプをセットします。
       ※「0」(固定値)をセットします。
・fForce・・・切断方法をセットします。
       ※「True」(固定値)をセットします。
実行すると戻り値で「0」又は「0以外」が返されます。戻り値が「0」の場合は処理が正常終了した事となり、MsgBoxで”正常に切断されました。”を表示します。また、「0以外」の場合は処理にエラーがある事となり、MsgBoxで”エラーがあります。”を表示します。

f:id:m_kbou:20210511114645p:plain

[実行例]:

(事前確認)

エクスプローラーを開き、Zドライブが接続されている事を確認します。

f:id:m_kbou:20210522180203p:plain

①<切断>ボタンをクリックします。

f:id:m_kbou:20210511114717p:plain

②結果は正常に切断され、MsgBoxで「正常に切断されました。(戻り値:0)」が表示されます。(※今回は正常に切断された状態について紹介しましたが、戻り値が0以外の場合は何かしらのエラーがあります。その場合は上記プログラミング内の処理②にある切断するドライブ(lpName)の指定を見直してみて下さい。)

f:id:m_kbou:20210511114733p:plain

③再度エクスプローラーを開いてみると、Zドライブが切断されている事が分かります。

f:id:m_kbou:20210522180142p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

共有フォルダを切断する方法についての説明は以上です。

 

おわりに

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