Acabo de encontrarme esta función y creo que te puede servir. Falta crear una macro que se ejecute cada por tiempo y actualize la función para que logres lo que necesitas. Este es el código:
Public Function f_EquipoResponde(str_Equipo As String) As Boolean
'Esta función recibe un nombre de equipo (ya sea nombre en sí o IP y, por medio de PING, revisa si el
'equipo responde o no
Dim obj_Shell As Object 'Objeto shell para ejecutar ping y enviar la salida a un fichero
'temporal
Dim obj_FileSystem As Object 'Objeto FileSystem para abrir y borrar el fichero temporal
Dim obj_Fichero As Object 'Objeto File para leer el fichero temporal
Dim str_ContenidoFichero As String 'Se volcará en esta variable el contenido del fichero temporal
Dim str_FicheroTemporal As String 'Sirve para establecer la ruta y nombre del fichero temporal
'Creamos los objetos FileSystem y Shell
Set obj_Shell = CreateObject("WScript.Shell")
Set obj_FileSystem = CreateObject("Scripting.FileSystemObject")
'Establecemos el fichero temporal en la ruta de este libro de Excel y con el nombre "temp.txt"
str_FicheroTemporal = ThisWorkbook.Path & "\temp.txt"
' Call Shell("cmd /k ""c:\windows\system32\ping.exe -n 1 " & str_Equipo & """ > " & _
' str_FicheroTemporal, vbMaximizedFocus)
'Ejecutamos el ping volcando la salida en el fichero temporal. Sólo esperaremos un eco ("-n 1")
obj_Shell.Run "cmd /c ping -n 1 " & str_Equipo & " > """ & _
str_FicheroTemporal & """", 0, True
'Abrimos el fichero temporal sobre el objeto fichero
Set obj_Fichero = obj_FileSystem.OpenTextFile(str_FicheroTemporal, 1, False)
'Volcamos el contenido del fichero temporal en str_ContenidoFichero
str_ContenidoFichero = obj_Fichero.ReadAll
'Cerramos el fichero temporal y vaciamos su variable
obj_Fichero.Close
Set obj_Fichero = Nothing
'Borramos el fichero temporal y vaciamos los objetos Shell y FileSystem
obj_FileSystem. DeleteFile (str_FicheroTemporal)
Set obj_FileSystem = Nothing
Set obj_Shell = Nothing
'Si encontramos la cadena "perdidos = 0" significa que el equipo respondió y por tanto la función
'devuelve True, en caso contrario significa que no respondió el equipo y por tanto devuelve False
If InStr(str_ContenidoFichero, "perdidos = 0") > 0 Then
f_EquipoResponde = True
Else
f_EquipoResponde = False
End If
End Function
La puedes usar de la siguiente forma: desde A1 hasta Ax puedes poner las direcciones IP, en B1 hasta Bx digitas la función =f_EquipoResponde(A1). Por último en C1 hasta Cx puedes poner la fórmula =Si(B1="Verdadero",1,0).
Espero te sirva.
[email protected][email protected]