如何检索这台电脑的IP地址?

什么是最简单的(模块包含,代码长度等)方式来检索机器的IP地址(第一个接口打开)? 我知道一些使用MSINET的解决scheme,但我相信我们可以做得更好。 不要回复

Function HomeIP() as Atring HomeIP= "127.0.0.1" End Function 

因为这不是那么有趣…或者是正确的。 该场景是一个文件IDfunction的问题,我试图build立一个答复。

以下是Technet的一个改编的例子:

 Function GetIPAddress() Const strComputer As String = "." ' Computer name. Dot means local computer Dim objWMIService, IPConfigSet, IPConfig, IPAddress, i Dim strIPAddress As String ' Connect to the WMI service Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") ' Get all TCP/IP-enabled network adapters Set IPConfigSet = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE") ' Get all IP addresses associated with these adapters For Each IPConfig In IPConfigSet IPAddress = IPConfig.IPAddress If Not IsNull(IPAddress) Then strIPAddress = strIPAddress & Join(IPAddress, ", ") End If Next GetIPAddress = strIPAddress End Function 

它要求您在项目的引用中有Microsoft WMI脚本库。

我发现了几个例子:

http://www.everythingaccess.com/tutorials.asp?ID=Get-all-IP-Addresses-of-your-machine

http://puremis.net/excel/code/079.shtml

编辑

这里是第一个链接的代码,稍作修改

 Option Explicit ' VBA MODULE: Get all IP Addresses of your machine ' (c) 2005 Wayne Phillips (http://www.everythingaccess.com) ' Written 18/05/2005 ' ' REQUIREMENTS: Windows 98 or above, Access 97 and above ' ' Please read the full tutorial here: ' http://www.everythingaccess.com/tutorials.asp?ID=Get-all-IP-Addresses-of-your-machine ' ' Please leave the copyright notices in place. ' Thank you. ' 'Option Compare Database 'A couple of API functions we need in order to query the IP addresses in this machine Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Declare Function GetIpAddrTable Lib "Iphlpapi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long 'The structures returned by the API call GetIpAddrTable... Type IPINFO dwAddr As Long ' IP address dwIndex As Long ' interface index dwMask As Long ' subnet mask dwBCastAddr As Long ' broadcast address dwReasmSize As Long ' assembly size Reserved1 As Integer Reserved2 As Integer End Type Public Function ConvertIPAddressToString(longAddr As Long) As String Dim IPBytes(3) As Byte Dim lngCount As Long 'Converts a long IP Address to a string formatted 255.255.255.255 'Note: Could use inet_ntoa instead CopyMemory IPBytes(0), longAddr, 4 ' IP Address is stored in four bytes (255.255.255.255) 'Convert the 4 byte values to a formatted string While lngCount < 4 ConvertIPAddressToString = ConvertIPAddressToString + _ CStr(IPBytes(lngCount)) + _ IIf(lngCount < 3, ".", "") lngCount = lngCount + 1 Wend End Function Public Function GetFirstNonLocalIPAddress() Dim Ret As Long, Tel As Long Dim bytBuffer() As Byte Dim IPTableRow As IPINFO Dim lngCount As Long Dim lngBufferRequired As Long Dim lngStructSize As Long Dim lngNumIPAddresses As Long Dim strIPAddress As String On Error GoTo ErrorHandler: Call GetIpAddrTable(ByVal 0&, lngBufferRequired, 1) If lngBufferRequired > 0 Then ReDim bytBuffer(0 To lngBufferRequired - 1) As Byte If GetIpAddrTable(bytBuffer(0), lngBufferRequired, 1) = 0 Then 'We've successfully obtained the IP Address details... 'How big is each structure row?... lngStructSize = LenB(IPTableRow) 'First 4 bytes is a long indicating the number of entries in the table CopyMemory lngNumIPAddresses, bytBuffer(0), 4 While lngCount < lngNumIPAddresses 'bytBuffer contains the IPINFO structures (after initial 4 byte long) CopyMemory IPTableRow, _ bytBuffer(4 + (lngCount * lngStructSize)), _ lngStructSize strIPAddress = ConvertIPAddressToString(IPTableRow.dwAddr) If Not ((strIPAddress = "127.0.0.1")) Then GetFirstNonLocalIPAddress = strIPAddress Exit Function End If lngCount = lngCount + 1 Wend End If End If Exit Function ErrorHandler: MsgBox "An error has occured in GetIPAddresses():" & vbCrLf & vbCrLf & _ Err.Description & " (" & CStr(Err.Number) & ")" End Function 

你可以执行shell命令ipconfig并parsing返回的结果吗?

还有另一种使用ipconfig的简单方法。 http://www.vbaexpress.com/kb/getarticle.php?kb_id=537

Codeproject有一个很好的文章如何使用.net做到这一点: http : //www.codeproject.com/KB/cs/network.aspx

您可以随时创build一个控制台可执行文件,并从VBA中调用它。

RO

无论如何, nbtstat -n可能会在XP上完成这项工作。 不确定其他Windows版本或其他语言的本地化。 部分样本输出:

C:\ Documents and Settings \ colin> nbtstat -n

本地连接:节点IP地址:[192.168.1.100]作用域ID:[]

  NetBIOS Local Name Table 

等等

 Option Explicit Sub Main() Dim wsh As Object Dim strIPOutputFile As String, strSingleLine As String, strIP As String, strToFind As String Dim intSourceFile As Integer, intLocation As Integer Set wsh = CreateObject("WScript.Shell") strIPOutputFile = "C:\Users\MeMeMeMe\Desktop\txtfile.txt" 'Save ipconfig info to file wsh.Run "%comspec% /c ipconfig/all> """ & strIPOutputFile & """ 'Close any open text files Close 'Get the number of the next free text file intSourceFile = FreeFile Open strIPOutputFile For Input As intSourceFile strToFind = "IPv4 Address. . . . . . . . . . . :" 'This will probably depend on your file Do Until EOF(intSourceFile) Input #intSourceFile, strSingleLine If InStr(1, strSingleLine, strToFind) > 0 Then Exit Do End If Loop intLocation = Len(strToFind) strIP = Trim(Mid(strSingleLine,1 + intLocation,Len(strSingleLine) - intLocation)) intLocation = Len(strIP) While Not IsNumeric(Mid(strIP,intLocation,1)) strIP = Left(strIP, Len(strIP) - 1) intLocation = Len(strIP) Wend Close MsgBox strIP End Sub