我需要在运行宏之前提醒用户,如果在 Wifi 而不是公司 LAN 上运行,则需要更长的时间。
我找到了以下代码:
使用VBA检查互联网连接
以下代码片段使用 API 函数来检查互联网连接以及连接类型:
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
如果您想知道它是否已连接,您可以使用以下内容:
CBool(InternetGetConnectedStateEx(0, vbNullString, 512, 0&))
这告诉我我有 LAN 连接,但无论我使用的是 WIFI 还是连接到 LAN 都会这样做。我需要区分它们。
有谁知道我该怎么做?
干杯
试试这个,它循环遍历每个连接并得到ID
、AdapterType
和ConnectionStatus
。只需使用您需要的那个。
Dim oObject
Dim adapter
Dim item
Set oObject = GetObject("WINMGMTS:\.ROOTcimv2")
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类。