Herramientas en Excel

C贸mo abrir Excel desde la l铆nea de comandos y pasarle argumentos

Raymundo Ycaza
#Excel Avanzado#Macros (VBA)#Trucos Excel#馃 Automatizaci贸n con Excel

Hace unos d铆as recib铆 en la caja de comentarios una聽pregunta de Marisol, la cual apuntaba a encontrar la forma de abrir聽Excel desde la l铆nea de comandos y adem谩s pasarle par谩metros o argumentos para las macros.

Bueno, la verdad es que el asunto me pareci贸 interesante. Recuerdo que una vez lo hice, para alguna tarea por ah铆 que luego termin茅 reemplazando por los viejos DTS de Microsoft SQL Server, pero eso ya es otra historia.

En esta entrada me permitir茅 ir directo al grano, porque聽se trata de algo m谩s avanzado que no le interesar谩 (de momento) a los principiantes en聽Excel.

C贸mo abrir聽Excel desde la l铆nea de comandos.

Bien, empecemos por el principio.聽驴C贸mo abrir Excel desde la l铆nea de comandos?

Puede parecer聽un poco peliaguda la pregunta, pero en realidad es muy sencillo.聽Incluso, lo vamos a simplificar un poco m谩s.

[pasos paso=鈥1鈥漖Averiguando d贸nde se encuentra Excel[/pasos]

As铆 que antes de aventurarnos en la l铆nea de聽comandos, vamos a averiguar cu谩l es la ruta completa a nuestro archivo聽ejecutable de Excel.

Para esto, ve al men煤 inicio y haz un clic derecho sobre el icono de Excel.

En el men煤 que se muestra, elige la opci贸n 鈥淧ropiedades鈥.

Abrir Excel desde la l铆nea de comandos

Una vez hecho esto, se mostrar谩 un cuadro de propiedades, en el cual vas a copiar la ruta completa del archivo ejecutable de Excel, tal y como te muestro en la imagen siguiente:

Abrir Excel desde la l铆nea de comandos

Terminada esta parte, ya sabemos d贸nde est谩 nuetro querido Excel. Ahora, vamos con lo que sigue.

[pasos paso=鈥2鈥漖Crear una funci贸n que reciba聽el argumento pasado por l铆nea de comandos[/pasos]

Esta parte es m谩s peliaguda, porque tienes que utilizar las聽API de Windows, pero en realidad no vamos a detenernos aqu铆. Bastar谩 con que copies esta funci贸n tal cual est谩 y no tendr谩s que preocuparte m谩s ya que su uso ser谩 transparente para ti.

Primero, crea un m贸dulo nuevo y en 茅l vas a pegar este c贸digo que te dejo aqu铆:

Option Base 0 Option Explicit Declare Function GetCommandLine Lib 鈥渒ernel32鈥 Alias 鈥淕etCommandLineW鈥 () As Long Declare Function lstrlenW Lib 鈥渒ernel32鈥 (ByVal lpString As Long) As Long Declare Sub CopyMemory Lib 鈥渒ernel32鈥 Alias 鈥淩tlMoveMemory鈥 (MyDest As Any, MySource As Any, ByVal MySize As Long) Function CmdToSTr(Cmd As Long) As String Dim Buffer() As Byte Dim StrLen As Long

If Cmd Then
    StrLen \= lstrlenW(Cmd) \* 2
    
    If StrLen Then
        ReDim Buffer(0 To (StrLen \- 1)) As Byte
        CopyMemory Buffer(0), ByVal Cmd, StrLen
        CmdToSTr \= Buffer
    End If
End If

End Function

[pasos paso=鈥3鈥漖Insertar tu propia funci贸n.[/pasos]

Pues empezamos todo esto porque ten铆as una funci贸n a la que le quer铆as pasar un argumento por聽l铆nea de comandos. 驴No es verdad?

Bien, entonces ahora es el momento de insertar esa funci贸n.

En mi caso, para mantener el ejemplo original, voy a utilizar la siguiente:

Private Sub Workbook_Open() Dim ComandoCrudo As Long Dim ComandoTexto As String Dim miArgumento As String

ComandoCrudo \= GetCommandLine
ComandoTexto \= CmdToSTr(ComandoCrudo)

miArgumento\= Right(ComandoTexto, 6)

MsgBox miArgumento

End Sub

隆Y listo! Nada m谩s que estos tres pasos son suficientes. 隆Ahora a probar tu obra maestra!

Explicando un poco el c贸digo.

Lo primero que vemos es que en la variable 鈥淐omandoCrudo鈥 estamos recibiendo el comando enviado聽a trav茅s de la consola,聽gracias a la funci贸n GetCommandLine.

Pero pasa y resulta, que esa funci贸n te est谩 devolviendo un valor num茅rico de tipo Long. As铆 que debemos 鈥渢ransformarlo鈥澛燼 texto normalito para poder utilizar ese par谩metro tan escurridizo.

Es as铆 que en la variable 鈥淐omandoTexto鈥, estamos almacenando justamente el comando en formato de texto, gracias a la funci贸n CmdToSTr(ComandoCrudo) que tenemos en聽el m贸dulo que聽creamos al principio.聽驴Recuerdas?

La funci贸n CmdToSTr, utiliza聽como argumento la variable 鈥淐omandoCrudo鈥 y la transforma a un texto que podremos manipular de acuerdo a nuestras necesidades.

Finalmente, para demostrar que ya lo podemos manipular, en la variable 鈥渕iArgumento鈥, almacenamos los seis 煤ltimos caracteres de 鈥淐omandoTexto鈥 para luego mostrarlo en un cuadro de mensaje.

Probando el c贸digo resultante.

驴Recuerdas que al principio de todo esto, averiguamos la ruta de Excel?

Bien, pues no fue en vano. Ahora lo vamos a necesitar.

Abre tu consola o ventana de l铆nea de comandos y escribe la ruta completa de Excel (entre comillas, tal cual la copiaste) y deja un espacio.

Luego del espacio, escribe tambi茅n entre comillas el nombre de tu archivo, con la extensi贸n inclu铆da.

Y finalmente, para terminar, la parte que m谩s nos interesaba desde el principio. El argumento.

Solamente debes de dejar un espacio despu茅s del nombre del archivo y colocas el聽texto siguiente:

/e/UsuarioAsiduo

La parte que dice 鈥淯suarioAsiduo鈥, es el argumento que t煤 le quieres pasar al archivo. Puede ser una fecha, un n煤mero, un nombre de archivo, un c贸digo, etc.

Abrir Excel desde la l铆nea de comandos

Ahora si le das a la tecla Enter, Excel abrir谩 el archivo y le pasar谩 el argumento 鈥淯suarioAsiduo鈥.

Pero como nuestra funci贸n indicaba que solo mostrar铆a los seis 煤ltimos caracteres, entonces:

Abrir Excel desde la l铆nea de comandos

Solo se muestra la parte que dice 鈥淎siduo鈥.

隆Sencillo!

No me dir谩s que te pareci贸 complicado,聽驴o s铆?

Concluyendo.

Como puedes ver, la funci贸n que聽colocamos en el m贸dulo es la 煤nica que hace todo el verdadero trabajo aqu铆. La funci贸n que colocar谩s dentro de la rutina聽Workbook_Open(), solamente manipular谩 el argumento de acuerdo a tu conveniencia para utilizarlo en el resto de operaciones que realice tu c贸digo.

De aqu铆 en adelante, solo debes personalizarlo聽para que se adapte a tus necesidades.

Con esto, ya puedes agregar un archivo .BAT para ejecutarlo con el programador de tareas, pasarle argumentos din谩micos a tu archivo de Excel y varios etc como聽tu聽imaginaci贸n pueda crear.

Ahora te toca a ti.

Si te ha gustado esta entrada y tambi茅n聽quieres implementar un archivo de Excel al que se le pueda pasar argumentos, entonces deja tu comentario, suscr铆bete a la lista de correos y a帽谩dete a mis redes sociales. Si te pasas por mi canal de Youtube, podr谩s ver los 煤ltimos v铆deos que voy colgando para engordar el repositorio.

Eso es todo por ahora. Marisol, espero tu comentario. Ojal谩 te ayude.

隆Nos vemos!

[firma]

Referencias:

鈫 Regresar al Blog