2017-01-26 697 views
2

会社のLANではなくWifiで実行すると時間がかかるマクロを実行する前にユーザーに警告する必要があります。Excel VBA - インターネットに接続されているかどうかを確認します.WiFiまたはイーサネットを経由している場合


私は、次のコードを発見した:

Public Declare Function InternetGetConnectedState _ 
         Lib "wininet.dll" (lpdwFlags As Long, _ 
              ByVal dwReserved As Long) As Boolean 

Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" Alias "InternetGetConnectedStateExA" (_ 
ByRef lpdwFlags As Long, _ 
ByVal lpszConnectionName As String, _ 
ByVal dwNameLen As Long, _ 
ByVal dwReserved As Long) As Long 


'Local system uses a modem to connect to the Internet. 
Private Const INTERNET_CONNECTION_MODEM As Long = &H1 

'Local system uses a LAN to connect to the Internet. 
Private Const INTERNET_CONNECTION_LAN As Long = &H2 

'Local system uses a proxy server to connect to the Internet. 
Private Const INTERNET_CONNECTION_PROXY As Long = &H4 

The following API functions are used 

Function IsConnected() As Boolean 

    Dim Stat As Long 

    IsConnected = (InternetGetConnectedState(Stat, 0&) <> 0) 

    If IsConnected And INTERNET_CONNECTION_LAN Then 
     MsgBox "Lan Connection" 
    ElseIf IsConnected And INTERNET_CONNECTION_MODEM Then 
     MsgBox "Modem Connection" 
    ElseIf IsConnected And INTERNET_CONNECTION_PROXY Then 
     MsgBox "Proxy" 
    End If 
End Function 

の場合:

Checking for internet connection using VBA

次のコードスニペットは、インターネット接続や接続 のも種類を確認するためにAPI関数を使用しています接続されているかどうかを知りたい場合は、次のように使用できます。

CBool(InternetGetConnectedStateEx(0, vbNullString, 512, 0&)) 

これは私がLANに接続しているが、私はWIFIの午前またはLANに接続されているかどうかので、それがない私に語りました。私はそれらを区別する必要があります。

どうすればいいですか?

乾杯

+0

どうやって行ったのですか?あなたはそれを働かせましたか? – KyloRen

+0

@KyloRen - あなたのソリューションはうまくいったと思います!ありがとうございました。以下のコメントを参照 – Nick

答えて

3

はこれを試してみてください、それはそれぞれの接続をループしIDAdapterTypeConnectionStatusを取得します。必要なものだけを使用してください。

Dim oObject 
Dim adapter 
Dim item 

Set oObject = GetObject("WINMGMTS:\\.\ROOT\cimv2") 

Set adapter = oObject.InstancesOf("Win32_NetworkAdapter") 

    For Each item In adapter 

     If item.NetconnectionID <> "null" Then 
     Debug.Print item.NetconnectionID 
     Debug.Print item.AdapterType 
     Debug.Print item.NetConnectionStatus 
    End If 
    Next 

にプレストンを@tomのおかげで、Win32_NetworkAdapter classへのリンク。

+1

+1素晴らしい返答。完全性のためにNetworkConnectionStatusなどがここにあります:https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx – User632716

+0

@tompreston、それに感謝します。 – KyloRen

+0

こんにちは、私はこれが動作すると思う応答のおかげで:)。私は2接続のnetconnectionstatusそれを取る意味ですか?私はwifiとLANでそれをテストしました。私は 'を追加しましたitem.NetConnectionStatus = 2 Then ....'接続されたインターフェイスを分離する – Nick

関連する問題