Ejecutar comando CMD desde Excel y mostrarlo en formulario
La gran ventana que tenemos con el lenguaje vba es que casi cualquier código que antes usábamos en Visual Basic 6.0 se puede reciclar, por decirlo de alguna manera.
Y por supuesto, el código usado en este artículo no es la excepción.
Comandos MS-DOS
Las instrucciones Batch de MS-DOS o CMD vienen desde las primeras versiones de Windows y aunque antes eran más populares, su uso es aún vigente, sobretodo con los archivos por lotes .BAT.
Figura 1. Ventana de comandos CMD.
Por qué usar comandos CMD en Excel
Entre los usos que les podemos dar a una instrucción CMD desde Excel podemos enlistar los siguientes:
- Hacer un respaldo del archivo activo con el comando COPY.
- Buscar un archivo con el comando DIR.
- Hacer un PING a un servidor en caso de que nos genere error al guardar archivos en red.
- Entre otros.
Cómo funciona
Tenemos un formulario en Excel vba donde tendremos un cuadro de texto donde ingresaremos el comando a ejecutar y otro cuadro de texto que nos devolverá el resultado en caso de que la instrucción lo amerite.
Figura 2. En un formulario de Excel vba podemos visualizar el resultado el comando CMD.
Código vba
Para los elementos del formulario usamos el código.
'Ejecutar el comando CMD ' Private Sub CommandButton2_Click() Me.txtResultado = EjecutarCMD(Me.txtComando) End Sub ' 'Cerrar el formulario ' Private Sub CommandButton3_Click() Unload Me End Sub ' 'Al iniciar el formulario ' Private Sub UserForm_Initialize() With Me .txtResultado.MultiLine = True .txtResultado.ScrollBars = fmScrollBarsBoth .txtResultado.Font = "Terminal" .txtComando.Font = "Terminal" End With End Sub
Para la función que ejecutará el comando CMD usamos el siguiente código en un módulo normal.
Option Explicit ' 'Función para ejecutar el comando CMD ' Function EjecutarCMD(Comando As String) As String Dim FSObj As Object Dim shellObj As Object Dim tmpFileObj As Object Dim sLine As String Dim sFilename As String ' On Error GoTo Errores Set FSObj = CreateObject("Scripting.FileSystemObject") Set shellObj = CreateObject("Wscript.Shell") sFilename = FSObj.GetTempName shellObj.Run "cmd /c " & Comando & " >" & sFilename, 0, True Set tmpFileObj = FSObj.OpenTextFile(sFilename, 1) Do While tmpFileObj.AtEndOfStream <> True sLine = tmpFileObj.Readline EjecutarCMD = EjecutarCMD & Trim(sLine) & vbNewLine Loop tmpFileObj.Close FSObj.DeleteFile (sFilename) Exit Function Errores: MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "EXCELeINFO" End Function ' 'Otra manera de ejecutar CMD Private Sub CommandButton1_Click() Shell "cmd.exe /c " & "dir *.* /s" End Sub
Anexos