Ocultar ventana ejecutando ping desde macro.

¿Qué tal? Tengo el siguiente planteo.
Macro:
Sub LanzarPings()
    Dim wksHoja As Worksheet
    Dim strInstruc As String, lngRetVal As Long, n As Long
    Dim strPing As String, strCarácter As String, intFreeFile As Integer
    Set wksHoja = Worksheets("Hoja1") 'Hoja que se procesará
    For n = 1 To wksHoja.[A65536].End(xlUp).Row
        strInstruc = Environ("systemroot") & "\system32\ping.exe -n 1 " & [Hoja1].Cells(n, 1) & " > c:\ping.txt && dir c:\ping.txt" 'Nota: el dir es para que el CMD tenga que esperar a que termine el ping.
        lngRetVal = ExecCmd("CMD.exe /C " & strInstruc)
        intFreeFile = FreeFile()
        Open "C:\ping.txt" For Input As intFreeFile
        While Not EOF(intFreeFile)
            Line Input #intFreeFile, strCarácter
            strPing = strPing & strCarácter
        Wend
        wksHoja.Cells(n, 2).Value = strPing
        strPing = ""
    Next n
    'MsgBox lngRetVal
Sub LanzarPings()    Dim wksHoja As Worksheet    Dim strInstruc As String, lngRetVal As Long, n As Long    Dim strPing As String, strCarácter As String, intFreeFile As Integer        Set wksHoja = Worksheets("Hoja1") 'Hoja que se procesará
    For n = 1 To wksHoja.[A65536].End(xlUp).Row        strInstruc = Environ("systemroot") & "\system32\ping.exe -n 1 " & [Hoja1].Cells(n, 1) & " > c:\ping.txt && dir c:\ping.txt" 'Nota: el dir es para que el CMD tenga que esperar a que termine el ping.        lngRetVal = ExecCmd("CMD.exe /C " & strInstruc)                intFreeFile = FreeFile()        Open "C:\ping.txt" For Input As intFreeFile        While Not EOF(intFreeFile)            Line Input #intFreeFile, strCarácter            strPing = strPing & strCarácter        Wend                wksHoja.Cells(n, 2).Value = strPing        strPing = ""    Next n    'MsgBox lngRetVal
Con esta Macro realizo un ping a toda la columna A, quisiera saber si es posible ocultar la ventana cada vez que se ejecuta el ping y si es posible extraer además de los datos de respuesta del ping, la fecha en la que se ejecuta.

1 Respuesta

Respuesta
1
'En lugar de esta:
lngRetVal = ExecCmd("CMD.exe /C " & strInstruc)
'Intenta con esta:
Dim lngRetValX as Double
lngRetValX = Shell("CMD.exe /c " & strInstruc)
Muchas gracias por la respuesta, en sí funciona ocultándose la ventana, pero no espera a que finalice el envío de 4 paquetes y ya toma los datos con 1 solo paquete enviado y me lo tira donde se lo indico.
¿Por el tema de la hora cómo podría hacer?
'aaaaaa.... lo que necesitas es una pausa un Sleep, después de ejecutar el ping,
'para que espere unos segundos antes de seguir ejecutando el código, algo así:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub LanzarPings() 
    Dim wksHoja As Worksheet 
    Dim strInstruc As String, lngRetVal As Lon
'.
'.
'.
'.tu código
'ejecutas el ping:
Dim lngRetValX as Double 
lngRetValX = Shell("CMD.exe /c " & strInstruc)
'Ejemplo, pausa de siete segundos:
Sleep 7000
`y sigues con el código
'.
'.
'.
'.
'.
end sub
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Sub LanzarPings()     Dim wksHoja As Worksheet     Dim strInstruc As String, lngRetVal As Lon'.'.'.'.tu código'ejecutas el ping:Dim lngRetValX as Double lngRetValX = Shell("CMD.exe /c " & strInstruc)'Ejemplo, pausa de siete segundos:Sleep 7000`y sigues con el código'.'.'.'.'.end sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas