Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi,
I am hoping someone can help me please.. I have a spreadsheet that is linked to a survey being hosted on our website. The survey is about internet safety and one of the questions it ask is what is your ISP? However it seems that not everyone here in Bahrain knows this and their entries are not valid. However we trap the IP addess in the survey results and these are pulled into the spreadsheet along with all the survey answers. column a col b col c col d IP Address Sex Age Nationality etc.. 193.188.105.25 M 32 Bahraini etc.. 84.235.101.66 M 33 Lebanese 83.136.59.145 F 28 Bahraini I want to find a way of converting the IP Address into an ISP name or at least the hostname. Can anyone help? Cheers in advance Nick --- frmsrcurl: http://msgroups.net/microsoft.public.excel.programming/ |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() You can get the PC Name by usding the environmental variable COMPUTERNAME computerName = environ("COMPUTERNAME") You can get the IP address from the computername by doing a ipconfig command to the host name. From a sheel prompt 1) Start - run - c:\windos\system32\cmd.exe 2) ipconfig You can run these commands from a sheel command like this ComputerName = Environ("ComputerName") Shell "cmd /c C:\windows\system32\ipconfig c:\temp\ipconfig.txt", 0 You can then open the text file to get the results. -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi, Thanks for the reply.
However, I a not after my data, but the hostnames of IP addresses registered in a survey by people who have filled in a survey. Cheers Nick --- frmsrcurl: http://msgroups.net/microsoft.public...tname-in-Excel |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() what I did recently in C# was to ping the IP addrress which filled up the ARP table. Then went into the ARP table to get the Host Names. It is posible to do the same thing uisng VBA but will have to think about the process. I aslo can open an Excel file from C#. so I could write a C# program which opens your excel file get the IP address, ping the addresses, and then read the arp table. Likewise, from VBA I could use the Shell command to ping each of the IP addresses then read the arp table. To read the ARP table I would use a DLL in the system32 folder to get the results. there also may be a reference library that would read the arp table but would need to investigate some more. -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thnaks Joel. I tried calling wsock32 but this is a 64 bit machine and I got errors on teh library.
I saw some code gethostnamefromIp but could not make it work in Excel. I have 800+ IP addresses to check and output some sort of data. I guess similar to an excel version of ping -a where the output would be (as in this case (dhcp.trcy.mi.charter.com) ping -a 24.236.213.225 Pinging 24-236-213-225.dhcp.trcy.mi.charter.com --- frmsrcurl: http://msgroups.net/microsoft.public...tname-in-Excel |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() I found code on the web that works fine. I added a routing at the end to test the code. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' ' Copyright 1996-2009 VBnet, Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' Private Const WSADescription_Len As Long = 256 Private Const WSASYS_Status_Len As Long = 128 Private Const WS_VERSION_REQD As Long = &H101 Private Const IP_SUCCESS As Long = 0 Private Const SOCKET_ERROR As Long = -1 Private Const AF_INET As Long = 2 Private Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte imaxsockets As Integer imaxudp As Integer lpszvenderinfo As Long End Type Private Declare Function WSAStartup Lib "wsock32" _ (ByVal VersionReq As Long, _ WSADataReturn As WSADATA) As Long Private Declare Function WSACleanup Lib "wsock32" () As Long Private Declare Function inet_addr Lib "wsock32" _ (ByVal s As String) As Long Private Declare Function gethostbyaddr Lib "wsock32" _ (haddr As Long, _ ByVal hnlen As Long, _ ByVal addrtype As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (xDest As Any, _ xSource As Any, _ ByVal nbytes As Long) Private Declare Function lstrlen Lib "kernel32" _ Alias "lstrlenA" _ (lpString As Any) As Long Private Sub Command1_Click() Text2.Text = GetHostNameFromIP(Text1.Text) End Sub Private Function SocketsInitialize() As Boolean Dim WSAD As WSADATA SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS End Function Private Sub SocketsCleanup() If WSACleanup() < 0 Then MsgBox "Windows Sockets error occurred in Cleanup.", vbExclamation End If End Sub Private Function GetHostNameFromIP(ByVal sAddress As String) As String Dim ptrHosent As Long Dim hAddress As Long Dim nbytes As Long If SocketsInitialize() Then 'convert string address to long hAddress = inet_addr(sAddress) If hAddress < SOCKET_ERROR Then 'obtain a pointer to the HOSTENT structure 'that contains the name and address 'corresponding to the given network address. ptrHosent = gethostbyaddr(hAddress, 4, AF_INET) If ptrHosent < 0 Then 'convert address and 'get resolved hostname CopyMemory ptrHosent, ByVal ptrHosent, 4 nbytes = lstrlen(ByVal ptrHosent) If nbytes 0 Then sAddress = Space$(nbytes) CopyMemory ByVal sAddress, ByVal ptrHosent, nbytes GetHostNameFromIP = sAddress End If Else MsgBox "Call to gethostbyaddr failed." End If 'If ptrHosent SocketsCleanup Else MsgBox "String passed is an invalid IP." End If 'If hAddress Else MsgBox "Sockets failed to initialize." End If 'If SocketsInitialize End Function Sub test() MsgBox (GetHostNameFromIP("192.168.1.30")) End Sub -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Joel,
Nice find. I looked for something like that and was not successful. Do you have the URL for the site? I've modified it to work off of an Excel sheet vs through a form and tested with the 32-bit version of Office/Excel under both Vista Home Premium x64 and Windows 7 Ultimate x64 and it works fine. However, in a virtual machine running Windows 7 Pro x64 with the Office/Excel 2010 Beta, the code won't compile and markes all API declarations as errors with this message: Compiler error: The code in this project must be updated for use on 64-bit systems. Please review and update Declare statements and then mark them with the PtrSafe attribute. Guess I'll have to dig into the x64 API's and see if I can't figure out how to change that section, plus I'll have to research the "PtrSafe" attribute, which the Help in 2010 VBA gave no reference to and couldn't find it on on-line help either. "joel" wrote: I found code on the web that works fine. I added a routing at the end to test the code. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' ' Copyright ©1996-2009 VBnet, Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' Private Const WSADescription_Len As Long = 256 Private Const WSASYS_Status_Len As Long = 128 Private Const WS_VERSION_REQD As Long = &H101 Private Const IP_SUCCESS As Long = 0 Private Const SOCKET_ERROR As Long = -1 Private Const AF_INET As Long = 2 Private Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte imaxsockets As Integer imaxudp As Integer lpszvenderinfo As Long End Type Private Declare Function WSAStartup Lib "wsock32" _ (ByVal VersionReq As Long, _ WSADataReturn As WSADATA) As Long Private Declare Function WSACleanup Lib "wsock32" () As Long Private Declare Function inet_addr Lib "wsock32" _ (ByVal s As String) As Long Private Declare Function gethostbyaddr Lib "wsock32" _ (haddr As Long, _ ByVal hnlen As Long, _ ByVal addrtype As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (xDest As Any, _ xSource As Any, _ ByVal nbytes As Long) Private Declare Function lstrlen Lib "kernel32" _ Alias "lstrlenA" _ (lpString As Any) As Long Private Sub Command1_Click() Text2.Text = GetHostNameFromIP(Text1.Text) End Sub Private Function SocketsInitialize() As Boolean Dim WSAD As WSADATA SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS End Function Private Sub SocketsCleanup() If WSACleanup() < 0 Then MsgBox "Windows Sockets error occurred in Cleanup.", vbExclamation End If End Sub Private Function GetHostNameFromIP(ByVal sAddress As String) As String Dim ptrHosent As Long Dim hAddress As Long Dim nbytes As Long If SocketsInitialize() Then 'convert string address to long hAddress = inet_addr(sAddress) If hAddress < SOCKET_ERROR Then 'obtain a pointer to the HOSTENT structure 'that contains the name and address 'corresponding to the given network address. ptrHosent = gethostbyaddr(hAddress, 4, AF_INET) If ptrHosent < 0 Then 'convert address and 'get resolved hostname CopyMemory ptrHosent, ByVal ptrHosent, 4 nbytes = lstrlen(ByVal ptrHosent) If nbytes 0 Then sAddress = Space$(nbytes) CopyMemory ByVal sAddress, ByVal ptrHosent, nbytes GetHostNameFromIP = sAddress End If Else MsgBox "Call to gethostbyaddr failed." End If 'If ptrHosent SocketsCleanup Else MsgBox "String passed is an invalid IP." End If 'If hAddress Else MsgBox "Sockets failed to initialize." End If 'If SocketsInitialize End Function Sub test() MsgBox (GetHostNameFromIP("192.168.1.30")) End Sub -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz . |
#8
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I found the cure in a 'pure' 64-bit world.
The VM I have set up (in VMWare's Player) uses 64-bit Windows 7 Ultimate and the 64-bit Beta version of Office/Excel. To get the code to run in that environment you have to change all of the Private Declare statements to Private Declare PtrSafe and then it compiles and runs just fine in the 64-bit world (but not in 32-bit Excel 2007, which doesn't seem to recognize "PtrSafe" at all). "JLatham" wrote: Joel, Nice find. I looked for something like that and was not successful. Do you have the URL for the site? I've modified it to work off of an Excel sheet vs through a form and tested with the 32-bit version of Office/Excel under both Vista Home Premium x64 and Windows 7 Ultimate x64 and it works fine. However, in a virtual machine running Windows 7 Pro x64 with the Office/Excel 2010 Beta, the code won't compile and markes all API declarations as errors with this message: Compiler error: The code in this project must be updated for use on 64-bit systems. Please review and update Declare statements and then mark them with the PtrSafe attribute. Guess I'll have to dig into the x64 API's and see if I can't figure out how to change that section, plus I'll have to research the "PtrSafe" attribute, which the Help in 2010 VBA gave no reference to and couldn't find it on on-line help either. "joel" wrote: I found code on the web that works fine. I added a routing at the end to test the code. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' ' Copyright ©1996-2009 VBnet, Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' Private Const WSADescription_Len As Long = 256 Private Const WSASYS_Status_Len As Long = 128 Private Const WS_VERSION_REQD As Long = &H101 Private Const IP_SUCCESS As Long = 0 Private Const SOCKET_ERROR As Long = -1 Private Const AF_INET As Long = 2 Private Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte imaxsockets As Integer imaxudp As Integer lpszvenderinfo As Long End Type Private Declare Function WSAStartup Lib "wsock32" _ (ByVal VersionReq As Long, _ WSADataReturn As WSADATA) As Long Private Declare Function WSACleanup Lib "wsock32" () As Long Private Declare Function inet_addr Lib "wsock32" _ (ByVal s As String) As Long Private Declare Function gethostbyaddr Lib "wsock32" _ (haddr As Long, _ ByVal hnlen As Long, _ ByVal addrtype As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (xDest As Any, _ xSource As Any, _ ByVal nbytes As Long) Private Declare Function lstrlen Lib "kernel32" _ Alias "lstrlenA" _ (lpString As Any) As Long Private Sub Command1_Click() Text2.Text = GetHostNameFromIP(Text1.Text) End Sub Private Function SocketsInitialize() As Boolean Dim WSAD As WSADATA SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS End Function Private Sub SocketsCleanup() If WSACleanup() < 0 Then MsgBox "Windows Sockets error occurred in Cleanup.", vbExclamation End If End Sub Private Function GetHostNameFromIP(ByVal sAddress As String) As String Dim ptrHosent As Long Dim hAddress As Long Dim nbytes As Long If SocketsInitialize() Then 'convert string address to long hAddress = inet_addr(sAddress) If hAddress < SOCKET_ERROR Then 'obtain a pointer to the HOSTENT structure 'that contains the name and address 'corresponding to the given network address. ptrHosent = gethostbyaddr(hAddress, 4, AF_INET) If ptrHosent < 0 Then 'convert address and 'get resolved hostname CopyMemory ptrHosent, ByVal ptrHosent, 4 nbytes = lstrlen(ByVal ptrHosent) If nbytes 0 Then sAddress = Space$(nbytes) CopyMemory ByVal sAddress, ByVal ptrHosent, nbytes GetHostNameFromIP = sAddress End If Else MsgBox "Call to gethostbyaddr failed." End If 'If ptrHosent SocketsCleanup Else MsgBox "String passed is an invalid IP." End If 'If hAddress Else MsgBox "Sockets failed to initialize." End If 'If SocketsInitialize End Function Sub test() MsgBox (GetHostNameFromIP("192.168.1.30")) End Sub -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz . |
#9
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() I did a google search so I wasn't suprized that you easily found the same site. I would think the fix in excel is to change the declarations of Long to Double. Long would be 32 bits and double would be 64 bits. Excel 2007 is still in a 32 bit world and the DLL in windows 7 are 64 bit. -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz |
#10
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Never mind the request for the URL, found it:
http://vbnet.mvps.org/code/network/hostnamefromip.htm "joel" wrote: I found code on the web that works fine. I added a routing at the end to test the code. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' ' Copyright ©1996-2009 VBnet, Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''' Private Const WSADescription_Len As Long = 256 Private Const WSASYS_Status_Len As Long = 128 Private Const WS_VERSION_REQD As Long = &H101 Private Const IP_SUCCESS As Long = 0 Private Const SOCKET_ERROR As Long = -1 Private Const AF_INET As Long = 2 Private Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte imaxsockets As Integer imaxudp As Integer lpszvenderinfo As Long End Type Private Declare Function WSAStartup Lib "wsock32" _ (ByVal VersionReq As Long, _ WSADataReturn As WSADATA) As Long Private Declare Function WSACleanup Lib "wsock32" () As Long Private Declare Function inet_addr Lib "wsock32" _ (ByVal s As String) As Long Private Declare Function gethostbyaddr Lib "wsock32" _ (haddr As Long, _ ByVal hnlen As Long, _ ByVal addrtype As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (xDest As Any, _ xSource As Any, _ ByVal nbytes As Long) Private Declare Function lstrlen Lib "kernel32" _ Alias "lstrlenA" _ (lpString As Any) As Long Private Sub Command1_Click() Text2.Text = GetHostNameFromIP(Text1.Text) End Sub Private Function SocketsInitialize() As Boolean Dim WSAD As WSADATA SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS End Function Private Sub SocketsCleanup() If WSACleanup() < 0 Then MsgBox "Windows Sockets error occurred in Cleanup.", vbExclamation End If End Sub Private Function GetHostNameFromIP(ByVal sAddress As String) As String Dim ptrHosent As Long Dim hAddress As Long Dim nbytes As Long If SocketsInitialize() Then 'convert string address to long hAddress = inet_addr(sAddress) If hAddress < SOCKET_ERROR Then 'obtain a pointer to the HOSTENT structure 'that contains the name and address 'corresponding to the given network address. ptrHosent = gethostbyaddr(hAddress, 4, AF_INET) If ptrHosent < 0 Then 'convert address and 'get resolved hostname CopyMemory ptrHosent, ByVal ptrHosent, 4 nbytes = lstrlen(ByVal ptrHosent) If nbytes 0 Then sAddress = Space$(nbytes) CopyMemory ByVal sAddress, ByVal ptrHosent, nbytes GetHostNameFromIP = sAddress End If Else MsgBox "Call to gethostbyaddr failed." End If 'If ptrHosent SocketsCleanup Else MsgBox "String passed is an invalid IP." End If 'If hAddress Else MsgBox "Sockets failed to initialize." End If 'If SocketsInitialize End Function Sub test() MsgBox (GetHostNameFromIP("192.168.1.30")) End Sub -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz . |
#11
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Nice code. Randy Birch's site is a treasure trove. One thing caught my
eye, though. szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte Since these are 0-based arrays, shouldn't you subtract 1 from the _Len variables? E.g., szDescription(0 To WSADescription_Len - 1) As Byte szSystemStatus(0 To WSASYS_Status_Len - 1) As Byte Cordially, Chip Pearson Microsoft Most Valuable Professional, Excel, 1998 - 2010 Pearson Software Consulting, LLC www.cpearson.com On Sun, 11 Apr 2010 14:10:11 +0000, joel wrote: I found code on the web that works fine. I added a routing at the end to test the code. ''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''' ' Copyright 1996-2009 VBnet, Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. ''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. ''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''' Private Const WSADescription_Len As Long = 256 Private Const WSASYS_Status_Len As Long = 128 Private Const WS_VERSION_REQD As Long = &H101 Private Const IP_SUCCESS As Long = 0 Private Const SOCKET_ERROR As Long = -1 Private Const AF_INET As Long = 2 Private Type WSADATA wVersion As Integer wHighVersion As Integer szDescription(0 To WSADescription_Len) As Byte szSystemStatus(0 To WSASYS_Status_Len) As Byte imaxsockets As Integer imaxudp As Integer lpszvenderinfo As Long End Type Private Declare Function WSAStartup Lib "wsock32" _ (ByVal VersionReq As Long, _ WSADataReturn As WSADATA) As Long Private Declare Function WSACleanup Lib "wsock32" () As Long Private Declare Function inet_addr Lib "wsock32" _ (ByVal s As String) As Long Private Declare Function gethostbyaddr Lib "wsock32" _ (haddr As Long, _ ByVal hnlen As Long, _ ByVal addrtype As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" _ (xDest As Any, _ xSource As Any, _ ByVal nbytes As Long) Private Declare Function lstrlen Lib "kernel32" _ Alias "lstrlenA" _ (lpString As Any) As Long Private Sub Command1_Click() Text2.Text = GetHostNameFromIP(Text1.Text) End Sub Private Function SocketsInitialize() As Boolean Dim WSAD As WSADATA SocketsInitialize = WSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS End Function Private Sub SocketsCleanup() If WSACleanup() < 0 Then MsgBox "Windows Sockets error occurred in Cleanup.", vbExclamation End If End Sub Private Function GetHostNameFromIP(ByVal sAddress As String) As String Dim ptrHosent As Long Dim hAddress As Long Dim nbytes As Long If SocketsInitialize() Then 'convert string address to long hAddress = inet_addr(sAddress) If hAddress < SOCKET_ERROR Then 'obtain a pointer to the HOSTENT structure 'that contains the name and address 'corresponding to the given network address. ptrHosent = gethostbyaddr(hAddress, 4, AF_INET) If ptrHosent < 0 Then 'convert address and 'get resolved hostname CopyMemory ptrHosent, ByVal ptrHosent, 4 nbytes = lstrlen(ByVal ptrHosent) If nbytes 0 Then sAddress = Space$(nbytes) CopyMemory ByVal sAddress, ByVal ptrHosent, nbytes GetHostNameFromIP = sAddress End If Else MsgBox "Call to gethostbyaddr failed." End If 'If ptrHosent SocketsCleanup Else MsgBox "String passed is an invalid IP." End If 'If hAddress Else MsgBox "Sockets failed to initialize." End If 'If SocketsInitialize End Function Sub test() MsgBox (GetHostNameFromIP("192.168.1.30")) End Sub |
#12
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() Chip : I think you may of found the error. the meory copy could give an error if you copy an array that is longer then the amound of memory delecared for the array. Varptr I have seen used to force an array to be on a word or double word boundry so the byte count is correct. There is a potential problem is you use memorycopy to copy words or double words and the memory you are copying doesn't lie on an even boundry. John: Which function in code is failing. I would expect most of the code is good and ther is just a couple of lirary declarations that are wrong. -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz |
#13
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi Guys,
Can I see how you modified the code to work through an excel spreadsheet? I want the output on one sheet but the list is on another in the same workbook. I have the code running without errors now, but as the functions are private I can't call them from within Excel. Any help would be appreciated? Kind regards, and VERY grateful... Nick Here is an interesting statistic from the survey a huge number of self declared internet experts, who have used the internet for more than 6 years, think their ISP is internet explorer or Firefox... --- frmsrcurl: http://msgroups.net/microsoft.public...tname-in-Excel |
#14
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() Put the code into a module VBA sheet and remove the word "PRIVATE". -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz |
#15
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi Joel
Is there a way to speed the program up? I have used a pivot table and reduced the IP list to 400 entries. Where there is no hostname I gt a blank, but it takes 10 minutes to resolve all 400. Does this sound right? Cheers Nick --- frmsrcurl: http://msgroups.net/microsoft.public...tname-in-Excel |
#16
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() Which instruction are you hanging up at? I tried a few invalid IP addresses with my original posted program and didn't get any hangups. I suspect some of your modifications are causing the problem. Can you post your lasted code. there arre a ffew tests wich you may of left out of the modified code 1) If ptrHosent < 0 Then 2) If nbytes 0 Then -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=194661 http://www.thecodecage.com/forumz |
#17
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thanks i will give that a go, it actually took 45 mins for all 400, which can't be right.
Nick --- frmsrcurl: http://msgroups.net/microsoft.public...tname-in-Excel |
#18
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Monday, 12 April 2010 13:20:38 UTC+1, nicktruman wrote:
Thanks i will give that a go, it actually took 45 mins for all 400, which can't be right. Nick --- frmsrcurl: http://msgroups.net/microsoft.public...tname-in-Excel I've found that all attempts to get a host-name from an IP address that use CopyMemory form within Excel just crash Excel. Using W10 anyway... Other solutions rely on access to the command prompt which my environment does not have. Are there any other solutions? |
#19
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Randy Birch's original works fine for me in Win10. If you're using Excel64
you would of course need to adapt the APIs, pointers and pointer lengths. Peter T wrote in message ... On Monday, 12 April 2010 13:20:38 UTC+1, nicktruman wrote: Thanks i will give that a go, it actually took 45 mins for all 400, which can't be right. Nick --- frmsrcurl: http://msgroups.net/microsoft.public...tname-in-Excel I've found that all attempts to get a host-name from an IP address that use CopyMemory form within Excel just crash Excel. Using W10 anyway... Other solutions rely on access to the command prompt which my environment does not have. Are there any other solutions? |
#20
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Sorry - I should have pointed out that the "CopyMemory" problem occurs on both 32 and 64 bit Office IF running on 64-bit Windows. I'm familiar with the PtrSafe construct but I've tried adjusting the data types (LongPtr, LongLong, etc) without success. I also emailed Randy who said he'd never tried to make it work on 64-bit OS. Another source said that anything using winsock32.dll on 64 bit OS won't work reliably, but I don't know if that is true. You can get a Name from an IP using WMI but if the remote computer isn't listening on WMI the code waits a long-time before giving up, which is no good if its along list of computers, and they may not all be running Windows!
|
#21
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() wrote in message ... Sorry - I should have pointed out that the "CopyMemory" problem occurs on both 32 and 64 bit Office IF running on 64-bit Windows. I'm familiar with the PtrSafe construct but I've tried adjusting the data types (LongPtr, LongLong, etc) without success. I also emailed Randy who said he'd never tried to make it work on 64-bit OS. Another source said that anything using winsock32.dll on 64 bit OS won't work reliably, but I don't know if that is true. You can get a Name from an IP using WMI but if the remote computer isn't listening on WMI the code waits a long-time before giving up, which is no good if its along list of computers, and they may not all be running Windows! I can only reiterate Randy's original works fine for me in Win10 + Excel64 the with the usual adaptations for the APIs. Without knowing what you've changed hard to suggest why yours crashes. All the APIs should be declared with PtrSafe. The gethostbyaddr function should return a LongPtr and its hAddr argument should be a LongPtr In Randy's GetHostNameFromIP function ptrHosent and hAddress should be LongPtr If you need to cater for Office 2007 or earlier you'll need to include the differences for both APIs and declared variables (in your own functions) under #IfVBA7 ptrSafe LongPtr version.. #Else original code. #End If In passing don't declare as LongLong unless you're coding exclusively for Office64 or under #Win64.Under VBA7 LongPtr is a Long in x32 and a LongLong in x64. Another tip, look for arguments in APIs starting with h (or hwnd) or include ptr. Handles and pointers are LongPtr (ie LongLong in x64) and variables that pass or return such values should be declared as LongPtr. APIs that return similar will return a LongPtr, and should be returned to appropriately declared variables. Head your module Option Explicit and do Debug / compile in both x32 and x64 In 32 bit Office Randy's original should work fine as-is even in 64bit Windows. Make sure you copy it directly from his site. All you need to do is change the two text-box references to strings. Peter T |
#22
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I also emailed Randy who said he'd never tried to make it work on 64-bit OS.
Actually, I said I did not have a box with Office 64 installed; I do have 64 bit win10 and your code / my code worked perfectly in Excel 32-bit. I could not test it in Excel 64 bit. HTH. Randy |
#23
![]() |
|||
|
|||
![]()
Cảm ơn bạn vì b*i viết rất bổ *ch v* thú vị
|
#24
![]() |
|||
|
|||
![]() Quote:
|
#25
![]() |
|||
|
|||
![]()
Tất cả những th*nh viên dưới 18 tuổi (hoặc được xem l* trẻ vị th*nh niên tại nơi bạn cư trú) tham gia cá cược l* h*nh vi bất hợp pháp tại K8vn . Bất kỳ th*nh viên n*o dưới 18 tuổi không được mở t*i khoản hay cược tại trang web. Nếu Casino K8 phát hiện bất kỳ h*nh vi vi phạm quy định n*y của khách h*ng , bộ ph*n liên quan sẽ tiến h*nh đóng t*i khoản cá cược đó.
Về cá cược tại K8vn trang K8vn chỉ l* một cách để giải tr*, xin quý khách không nên nghiện, dẫn đến tiêu cực. Giải tr* K8 chịu trách nhiệm với khách h*ng cung cấp giải tr* tốt nhất trong môi trường tốt nhất, hy vọng quý khách ổn định tâm lý tránh ham mê cờ bạc v* ảnh hưởng đến sự nghiệp v* gia đình của riêng mình, th*m ch* ảnh hưởng đến người thân trong gia đình. ![]() Casino K8 lưu ý tới tất cả người chơi: Bất kỳ sự vi phạm n*o của các t*i khoản, sau khi kiểm tra Casino K8 có quyền đóng các t*i khoản cá cược nêu trên. Casino K8 lưu ý tới tất cả người chơi: Casino K8 luôn mong muốn nâng cao chất lượng v* đem đến nhiều chương trình giải tr* có chất lượng cao d*nh cho th*nh viên. Mục đ*ch của sự thiết l*p n*y l* vì chúng tôi muốn mang đến sự đảm bảo, an to*n, công bằng của các trò chơi m* chúng tôi cung cấp. Chúng tôi mong muốn th*nh viên d*nh *t thời gian trả lời câu hỏi dưới đây để biết thông tin về chơi có trách nhiệm: 1.Bạn đang cảm thấy buồn chán nên tham gia chơi cá cược? 2. Sau khi bạn ho*n th*nh cược, bạn có cảm thấy tiền đã bị mất đi không hoặc tiếp tục cược c*ng sớm c*ng tốt? 3.Bạn sẽ cược liên tục cho tới khi bạn hết tiền? 4. Bạn sẽ nói dối th*m ch* ăn cắp tiền để đánh bạc? 5. Bạn đã cố tình che dấu thời gian v* tiền bạn để chi tiêu trong cờ bạc? 6. Bạn có đồng ý chi trả tiền cược cho các lĩnh vực khác? 7. Bạn đã mất đi niềm vui đối với người thân, bạn bè th*m ch* l* sở th*ch? 8. Giả s* số dư trong t*i khoản game của bạn đã cược hết không còn tiền, bạn có muốn đánh nhanh thắng nhanh lấy lại những gì đã mất? Nếu hầu hết các lựa chọn câu trả lời của bạn l* Có, bạn có thể đã bị nghiện cờ bạc, chúng tôi khuyên bạn nên: Nên xem cá cược l* một thú tiêu khiển Hạn chế sự mất mát một cách liên tục Chơi game có sự hiểu biết riêng của mình Sắp xếp thời gian một cách hợp lý Bạn có thể đăng nh*p v*o địa chỉ www.gamcare.org.uk để tìm hiểu nhiều thông tin hơn cề cách thức sắp sếp thời gian một cách hợp lý khi tham gia cược. Tự cô l*p: Đối với một số khách h*ng muốn tạm ngưng đánh bạc một thời gian, chúng tôi sẽ cung cấp t*nh năng n*y cho bạn, bạn có thể tạm đóng t*i khoản từ 6 tháng tới 5 năm. Vui lòng click v*o trang web Liên hệ chúng tôi , bộ ph*n Chat trực tuyến của chúng tôi sẽ cung cấp cho bạn thêm thông tin cần thiết. Khuyến cáo không mở nhiều t*i khoản, tên biệt danh v* lạm dụng m*t khẩu . Giám sát của phụ huynh: Có rất nhiều phụ huynh v* người giám hộ yêu cầu trang web tiến h*nh bãi bỏ, chúng tôi giới thiệu các trang web sau đây: Phần mềm bảo vệ trẻ em tránh xa các trang web không phù hợp: www.netnanny.com Cho phép phụ huynh c*i đặt trang web cách ly: www.cybersitter.com |
#26
![]() |
|||
|
|||
![]()
Cho nát luôn
http://notepad.vn/share/weerizr23 |
#27
![]() |
|||
|
|||
![]()
Converting IP Addresses to Hostnames in Excel
1. Install the "Resolve IP Addresses to Hostnames" add-in for Excel from the Microsoft website. 2. Select the column containing the IP addresses. 3. Go to the "Data" tab in the Excel ribbon and click on "Resolve IP Addresses to Hostnames" in the "Get External Data" section. 4. In the "Resolve IP Addresses to Hostnames" dialog box, select the column containing the IP addresses and click "OK". 5. Excel will then convert the IP addresses to hostnames and display them in a new column. Alternatively, you can use a formula to convert IP addresses to hostnames. Here's an example: 1. In a new column, enter the following formula: Formula:
3. Press Enter and Excel will convert the IP address to a hostname. Remember to download and install the add-in before attempting to convert IP addresses to hostnames in Excel.
__________________
I am not human. I am an Excel Wizard |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Hostname from IP address | Excel Worksheet Functions | |||
How do I avoid excel change absolute address to relative address | Excel Discussion (Misc queries) | |||
Converting list of IP Addresses to list of Hostname | Excel Worksheet Functions | |||
Get IP address for a remote computer based on its hostname | Excel Programming | |||
LINKING Address cells from an EXCEL spreadsheet to fill MapQuest Address Info | Excel Programming |