VBA: ejecutar un comando
sifusalade
Mensajes publicados
142
Estado
Miembro
-
f894009 Mensajes publicados 17417 Fecha de registro Estado Miembro Última intervención -
f894009 Mensajes publicados 17417 Fecha de registro Estado Miembro Última intervención -
Hola,
Para convertir un PNG a GIF dinámicamente para poder usarlo en un UserForm, encontré un ".exe" que permite hacer la conversión.
Sin embargo, para funcionar, necesita que arrastremos/soltemos el PNG a convertir directamente sobre el ".exe"
A través de la consola cmd, si escribo la ruta del exe -> (espacio) -> ruta del PNG, funciona.
Además, me gustaría poder ejecutar esta línea de comando en VBA automáticamente. (Y cerrar la ventana cmd una vez finalizado).
He encontrado en internet la función Shell. Puedo ejecutar el cmd, pero necesito ingresar la línea de comando manualmente.
No entiendo cómo proporcionar los argumentos de la función shell para eso.
¿Alguien puede ayudarme?
Agradeciéndoles de antemano.
Para convertir un PNG a GIF dinámicamente para poder usarlo en un UserForm, encontré un ".exe" que permite hacer la conversión.
Sin embargo, para funcionar, necesita que arrastremos/soltemos el PNG a convertir directamente sobre el ".exe"
A través de la consola cmd, si escribo la ruta del exe -> (espacio) -> ruta del PNG, funciona.
Además, me gustaría poder ejecutar esta línea de comando en VBA automáticamente. (Y cerrar la ventana cmd una vez finalizado).
He encontrado en internet la función Shell. Puedo ejecutar el cmd, pero necesito ingresar la línea de comando manualmente.
No entiendo cómo proporcionar los argumentos de la función shell para eso.
¿Alguien puede ayudarme?
Agradeciéndoles de antemano.
11 respuestas
Hola,
Entre otros sitios.
A ver: https://www.easy-micro.org/shell-vba.php&id=401 sobre todo por las comillas dobles (")
Entre otros sitios.
A ver: https://www.easy-micro.org/shell-vba.php&id=401 sobre todo por las comillas dobles (")
Muchas gracias. Miré y traté, pero aún no funciona.
Aquí está el código que ingresé:
Aquí está el código que ingresé:
Sub test() Dim appli As String Dim fichier As String appli = "C:\apng2gif.exe" fichier = DOSSIER_LOGOS & "toto.png" 'DOSSIER_LOGOS es una función que devuelve 'la ruta del directorio (como String), esta ruta 'tiene espacios Shell "C:\WINDOWS\system32\cmd.exe " & appli & " " & """ & fichier & """, vbMinimizedNoFocus End Sub
Hola,
esto sigue sin funcionar
No quiere decir nada, ¿qué está pasando o no? ¿Un mensaje de error?
Ponga un punto de ruptura en la línea Shell
Ejecute el código, pase el cursor del ratón sobre DOSSIER_LOGOS para ver el contenido
Quizás falte un \ delante de Toto.png
A ver:
Faltarían dos " delante de "C: y uno después de archivo
ejemplo:
Shell """C:\Program Files (x86)\Nuance\PDF Professional 8\bin\GaaihoDoc.exe"" """ & path1 & """", vbNormalFocus
esto sigue sin funcionar
No quiere decir nada, ¿qué está pasando o no? ¿Un mensaje de error?
Ponga un punto de ruptura en la línea Shell
Ejecute el código, pase el cursor del ratón sobre DOSSIER_LOGOS para ver el contenido
Quizás falte un \ delante de Toto.png
A ver:
Faltarían dos " delante de "C: y uno después de archivo
ejemplo:
Shell """C:\Program Files (x86)\Nuance\PDF Professional 8\bin\GaaihoDoc.exe"" """ & path1 & """", vbNormalFocus
La consola se inicia, pero está vacía. Solo muestra una localización en la carpeta documentos y eso es todo.
He intentado colocar las comillas dobles exactamente como en su ejemplo, pero reacciona exactamente de la misma manera.
La función DOSSIER_LOGOS devuelve la ruta con una \ al final.
No entiendo qué está mal.
He intentado colocar las comillas dobles exactamente como en su ejemplo, pero reacciona exactamente de la misma manera.
La función DOSSIER_LOGOS devuelve la ruta con una \ al final.
No entiendo qué está mal.
Como dije, esta función devuelve una cadena que es la ruta de una carpeta.
Esta función devuelve:
Cuando paso el mouse en modo de depuración, me devuelve esto correctamente. De hecho, también he probado poner un
Así que estoy seguro de que el problema no viene de ahí. Las carpetas "Images" y "Logos" están escritas sin errores (a través de copiar/pegar para estar seguro).
Esta función devuelve:
Function DOSSIER_LOGOS() as String DOSSIER_LOGOS = ThisWorkbook.Path & "\Images\Logos\" End Function
Cuando paso el mouse en modo de depuración, me devuelve esto correctamente. De hecho, también he probado poner un
MsgBox DOSSIER_LOGOSen un procedimiento de prueba, y me muestra la ruta correctamente.
Así que estoy seguro de que el problema no viene de ahí. Las carpetas "Images" y "Logos" están escritas sin errores (a través de copiar/pegar para estar seguro).
Hola,
para lanzar una aplicación en 64 bits, ve esto:
http://www.office-loesung.de/ftopic619862_0_0_asc.php
--
@+ El Pivert
para lanzar una aplicación en 64 bits, ve esto:
http://www.office-loesung.de/ftopic619862_0_0_asc.php
--
@+ El Pivert
Hola a los dos,
Lanzó la aplicación con un comando shell simple y funciona. Sin embargo, se abre la ventana de la aplicación y debo hacer clic en convertir.
Con otros comandos, incluido el del sitio dado por cs_Le Pivert, también se abre la ventana de la aplicación...
Lanzó la aplicación con un comando shell simple y funciona. Sin embargo, se abre la ventana de la aplicación y debo hacer clic en convertir.
Con otros comandos, incluido el del sitio dado por cs_Le Pivert, también se abre la ventana de la aplicación...
¡Muchas gracias a los dos! El método proporcionado por cs_Le Pivert funciona. Y para mí, no tengo que hacer clic en la consola. ¡Perfecto! Hice la prueba escribiendo el comando directamente. Solo queda generarlo con variables y estará listo.
Public Sub prcStartMSConfig64Cmd() Const WND_HIDE As Integer = 0 Dim objWshShell As Object Set objWshShell = CreateObject("WScript.Shell") objWshShell.Run "%windir%\Sysnative\cmd.exe " & _ "/C start c:\apng2gif.exe c:\toto.png", WND_HIDE, True 'solo he modificado esta línea Set objWshShell = Nothing End Sub
Para mí no funcionaba sin. Estoy totalmente perdido. Voy a tomarme unos días de descanso y a mirar esto de nuevo. Porque ahora, estoy totalmente desorientado. No entiendo. Pero estoy seguro de que me he perdido algo.
Sobre todo porque incluso al volver a poner el
Muchas gracias de todos modos por esta ayuda y el tiempo dedicado ????
Sobre todo porque incluso al volver a poner el
/c start, después de haberlo intentado sin, ya no funcionaba, me abría directamente el PNG. Así que estoy seguro de que he metido la pata en algún lugar, tengo el cerebro que no puede seguir ahora ????.. Estoy haciendo cualquier cosa.
Muchas gracias de todos modos por esta ayuda y el tiempo dedicado ????
gracias.
(PD: mis emoticonos han sido reemplazados por ??? así que eso cambia el sentido de la frase jaja)
Voy a hacer una pausa en el VBA unos días. Y volveré a aclarar mi (o mis errores). Eso puede ser útil para otros ^_^
(PD: mis emoticonos han sido reemplazados por ??? así que eso cambia el sentido de la frase jaja)
Voy a hacer una pausa en el VBA unos días. Y volveré a aclarar mi (o mis errores). Eso puede ser útil para otros ^_^
Hola,
Incluso después de descansar, sigo volando igual. Me di cuenta de que el problema viene de las comillas dobles.
En mis últimas pruebas, funcionaba porque para la variable appli tenía
Ahora que lo he reemplazado, ya no funciona.
La función DOSSIER_LOGOS devuelve una ruta que contiene espacios.
(D:\99 - Système\Utilisateurs\Moi\Bureau\Dossier Appli\Images\Logos\)
Y el problema viene de ahí.
Todavía no he entendido cómo colocar mis comillas dobles.
En el estado actual, obtengo un mensaje de error que dice que Windows no puede encontrar D:\99.
Incluso después de descansar, sigo volando igual. Me di cuenta de que el problema viene de las comillas dobles.
Sub Test(Str_Fichier as String) 'Str_Fichier contiene la ruta completa hacia un archivo Dim appli As String Dim Fichier As String Dim commande As String appli = DOSSIER_LOGOS & "apng2gif.exe" Fichier = DOSSIER_LOGOS & Str_NomFichier commande = "cmd /C start " & appli & " " & Fichier Shell commande, vbMinimizedNoFocus End Sub
En mis últimas pruebas, funcionaba porque para la variable appli tenía
appli = "C:\apng2gif.exe"(una ruta sin espacios).
Ahora que lo he reemplazado, ya no funciona.
La función DOSSIER_LOGOS devuelve una ruta que contiene espacios.
(D:\99 - Système\Utilisateurs\Moi\Bureau\Dossier Appli\Images\Logos\)
Y el problema viene de ahí.
Todavía no he entendido cómo colocar mis comillas dobles.
En el estado actual, obtengo un mensaje de error que dice que Windows no puede encontrar D:\99.
De hecho, puse C: para probar, pero la ruta de Appli debe seguir la carpeta que contiene el archivo de Excel.
Así que potencialmente D: y rutas con espacios. Quería probar cómo reaccionaría.
Pensé que solo tendría que cambiar el contenido de mi variable Appli una vez encontrada la orden correcta. Pero estaba completamente equivocado.
Hice muchas pruebas, incluyendo debug.print.
con
Debug.Print me da :
y
Tengo dobles comillas que rodean mis rutas, pero por otro lado, me abre directamente el archivo 58.png. Sin embargo, quiero lanzar este archivo 58.png con la aplicación apng2gif.exe (Appli)
PD: mi escritorio no está en C:, sino en D:
Así que potencialmente D: y rutas con espacios. Quería probar cómo reaccionaría.
Pensé que solo tendría que cambiar el contenido de mi variable Appli una vez encontrada la orden correcta. Pero estaba completamente equivocado.
Hice muchas pruebas, incluyendo debug.print.
con
comando = "cmd /c start " & """" & appli & """" & " " & """" & Fichier & """" Debug.Print comando
Debug.Print me da :
cmd /c start "D:\99 - Système\Utilisateurs\Moi\Bureau\Dossier Appli\Images\Logos\apng2gif.exe" "D:\99 - Système\Utilisateurs\Moi\Bureau\Dossier Appli\Images\Logos\58.png"
y
Shell comando, vbMinimizedNoFocus
Tengo dobles comillas que rodean mis rutas, pero por otro lado, me abre directamente el archivo 58.png. Sin embargo, quiero lanzar este archivo 58.png con la aplicación apng2gif.exe (Appli)
PD: mi escritorio no está en C:, sino en D:
¡MUCHAS GRACIAS!!!! Funciona.
De hecho, justo un minuto antes de ver esta genial respuesta, estaba pensando que no era posible y resolví el problema haciendo una copia de "apng2gif.exe" en "C:\TEMP\". Esto me permitía tener una ruta sin espacios para la aplicación. Y me obligaba a eliminar "C:\TEMP\apng2gif.exe" en Workbook_BeforeClose.
Pero ahora, es mucho mejor. Es realmente lo que quería hacer desde el principio.
No soy del tipo que pide ayuda para que la gente haga el trabajo por mí. También busco entender y aprender.
Si entiendo bien, la línea Chdir DOSSIER_LOGOS me posiciona en esa carpeta en la consola, ¿verdad? Y entonces, si es eso, y si lo entiendo bien, estando posicionado allí, no necesito una ruta absoluta.
De hecho, justo un minuto antes de ver esta genial respuesta, estaba pensando que no era posible y resolví el problema haciendo una copia de "apng2gif.exe" en "C:\TEMP\". Esto me permitía tener una ruta sin espacios para la aplicación. Y me obligaba a eliminar "C:\TEMP\apng2gif.exe" en Workbook_BeforeClose.
Pero ahora, es mucho mejor. Es realmente lo que quería hacer desde el principio.
No soy del tipo que pide ayuda para que la gente haga el trabajo por mí. También busco entender y aprender.
Si entiendo bien, la línea Chdir DOSSIER_LOGOS me posiciona en esa carpeta en la consola, ¿verdad? Y entonces, si es eso, y si lo entiendo bien, estando posicionado allí, no necesito una ruta absoluta.