Pasar un dato de Excel como parámetro a DOS

Necesito usar dos datos que tengo en celdas distintas de una hoja Excel para generar un comando ejecutable desde DOS. Por ejemplo, para hacer un PING a un equipo tengo un fichero .BAT con el comando "PING %1". Necesito pasar el dato que tengo en la casilla B3 que contiene la IP (192.168.1.1) para conseguir que se ejecute "PING 192.168.1.1"
Una vez conseguido esto la siguiente pregunta es ¿puedo mandar más de un parámetro? (PING %1 %2)
Es que lo que hago ahora es usar la función CONCATENAR para conseguir el comando que copio y luego pego en una ventana de comandos (o desde Ejecutar).

1 Respuesta

Respuesta
1
Se podría usar la función Shell de VBA para ejecutar el ping, pero no creo que te sirva de mucho porque cuando termine se cerrará la ventana de DOS. El código podría ser:
Sub Ping()
    Dim varRetorno As Variant
    varRetorno = Shell("ping " & [hoja1!B3].Value, vbNormalFocus) 'Cambiar hoja1 por el nombre de la hoja
End Sub
También sería posible procesar un rango de celdas, por ejemplo en Hoja1 desde A1 hasta la primera celda vacía de la columna A, pero en este caso el problema sería peor porque el código iría abriendo tantas ventanas como celdas con datos y las iría cerrando sin más. El código podría ser:
Sub Ping2()
    Dim varRetorno As Variant, n As Long
    For n = 1 To [Hoja1!a65536].End(xlUp).Row
        varRetorno = Shell("ping " & [Hoja1].Cells(1, n).Value, vbNormalFocus)
    Next n
End Sub
Para terminar de complicar las cosas, la función Shell trabaja de forma "asíncrona", de modo que no "espera" a que se ejecute la instrucción DOS sino que sigue alegremente con el resto del código (si lo hay).
Yo tuve que hacer hace tiempo un libro que tenía que ejecutar varias llamadas a una instrucción DOS determinada y volcar sus resultados en una hoja.
La instrucción no era ping, pero he intentado adaptar el libro para que procese las IPs o nombre de sitios web que haya en la columna A de Hoja1 y ponga el resultado en la celda contigua. Esto se consigue porque cada ping vuelca su resultado a un fichero de texto llamado c:\ping.txt y luego el código lo lee. Tal como va el código, pone todo seguido en la celda pero se podría "parsear".
El código es un pequeño lío porque, como no es posible usar SHELL, hay que usar varias llamadas a la API de windows y una función (llamada ExecCmd) que espera a que termine cada ejecución a CMD.EXE antes de ejecutar la siguiente (el código está sacado de Microsoft, la página figura al principio del código).
He limitado el número de peticiones de eco del ping a una para ganar tiempo de ejecución, pero aún así se producen retrasos si el sitio web no responde al ping.
El libro está en http://www.jrgc.es/ejemplos/Llamadas_a_CMD_EXE.xls y el sub que hay que ejecutar se llama LanzarPings
Hola jrgces,
Muchas gracias por tu ayuda. Voy a ver cómo lo encajo en lo que tengo, pero creo que la solución que me propones es muy buena.
Muchas gracias por todo.
Kamisoft

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas