|
Responder
|
| Autor | |
paloma
Habitual
Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 139 |
Tema: ShellExecute fichero sin conexión no salta errorEnviado: 28/Diciembre/2023 a las 19:37 |
|
Hola. Al intentar abrir un fichero excel (que está en red) con la función ShellExecute, si no tengo conexión con esta red no me salta ningún error para controlarlo, simplemente no abre el archivo y no hace nada y me gustaría controlar los errores para poder manejar mensajes de aviso. ¿Sabríais decirme por qué? En el módulo del formulario tengo declarada esta API (PtrSafe creo que es porque mi sistema es 64bits): Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 'API de Windows ShellExecute de la biblioteca "shell32.dll" Y el resto del código en un botón de comando: Private Sub cmbPdHcos_Click() Dim strFichero, strRuta As String strFichero = "Pedidos_hco " & Year(Date) & ".xlsx" strRuta = "\\red\red\GestionPedidos\Pedidoshco\" & strFichero Call ShellExecute(Me.hwnd, "Open", strRuta, "", "", 1) Muchas gracias Saludos,
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 28/Diciembre/2023 a las 19:45 |
|
Se puede controlar el status de la ejecución:
Siendo los códigos de ejecución: CASE hInstance : WHEN 0 THEN txt = "The operating system is out of memory or resources.". WHEN 2 THEN txt = "The specified file was not found". WHEN 3 THEN txt = "The specified path was not found.". WHEN 5 THEN txt = "Windows 95 only: The operating system denied " + "access to the specified file". WHEN 8 THEN txt = "Windows 95 only: There was not enough memory to " + "complete the operation.". WHEN 10 THEN txt = "Wrong Windows version". WHEN 11 THEN txt = "The .EXE file is invalid (non-Win32 .EXE or " + "error in .EXE image).". WHEN 12 THEN txt = "Application was designed for a different operating system". WHEN 13 THEN txt = "Application was designed for MS-DOS 4.0". WHEN 15 THEN txt = "Attempt to load a real-mode program". WHEN 16 THEN txt = "Attempt to load a second instance of " + "an application with non-readonly data segments". WHEN 19 THEN txt = "Attempt to load a compressed application file". WHEN 20 THEN txt = "Dynamic-link library (DLL) file failure". WHEN 26 THEN txt = "A sharing violation occurred.". WHEN 27 THEN txt = "The filename association is incomplete or invalid.". WHEN 28 THEN txt = "The DDE transaction could not be completed " + "because the request timed out.". WHEN 29 THEN txt = "The DDE transaction failed.". WHEN 30 THEN txt = "The DDE transaction could not be completed because " + "other DDE transactions were being processed.". WHEN 31 THEN txt = "There is no application associated with " + "the given filename extension.". WHEN 32 THEN txt = "Windows 95 only: The specified dynamic-link " + "library was not found.". OTHERWISE txt = "undocumented". END. Nota: No hagas caso del código, no es VBA, lo importante es el valor devuelto y el mensaje correspondiente |
|
![]() |
|
paloma
Habitual
Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 139 |
Enviado: 28/Diciembre/2023 a las 20:15 |
|
Hola, gracias Mihura, dónde pongo la función, en un módulo? Lo he he puesto en un módulo y he declarado también la API pero qué más hay que hacer, porque si yo pongo esto en el botón de comando, me da error de número de argumentos: RT_ShellExecute(Me.hwnd, "Open", strRuta, "", "", 1)
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 28/Diciembre/2023 a las 20:26 |
|
Para llamar a la función le tienes que pasar los parámetros que te pide ... en este caso, la ruta de lo que quieras abrir.
La función que he puesto, solo controla que no haya error, si quieres ser más explícito en el error tendrás que controlar los códigos que te devuelve (es la lista que he puesto a continuación de la función).
|
|
![]() |
|
paloma
Habitual
Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 139 |
Enviado: 28/Diciembre/2023 a las 20:31 |
|
Le he metido esto pero no hace nada, no entiendo, qué me estoy perdiendo? strFichero = "Pedidos_hco " & Year(Date) & ".xlsx" strRuta = "\\red\red\GestionPedidos\Pedidoshco\" & strFichero RT_ShellExecute (strRuta)
|
|
![]() |
|
paloma
Habitual
Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 139 |
Enviado: 28/Diciembre/2023 a las 21:02 |
|
Creo que mi error es porque no he metido los códigos de ejecución que me has puesto que pensaba que no se tenían que poner pero cómo los pongo. Si los pego tal cual me da error, pero no tengo ni pajolera idea,,,
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 28/Diciembre/2023 a las 22:08 |
|
Lo primero de todo es comprobar que ese archivo es 'abrible'...
Si pegas el valor que toma strRuta en el explorador de windows ¿se abre el archivo excel? |
|
![]() |
|
paloma
Habitual
Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 139 |
Enviado: 28/Diciembre/2023 a las 22:20 |
|
Sí se abre, el archivo y la ruta son correctos. Dudas. Veo que los códigos de ejecución hay que ajustarlos en un Select Case.. el when creo que sobra. La variable txt ¿no debería estar declarada en la función como string? Si la función RT_ShellExecute la declaras como Boolean, cuando yo la llame ¿no me devolverá en lugar del número de error, Falso o verdadero? Con esto no puedo recoger los números de error Y la variable txt que recoge las cadenas de texto de los errorres varios, ¿se lee en un msgbox cuando yo llame a la función, de qué manera? |
|
![]() |
|
pitxiku
Colaborador
Unido: 27/Septiembre/2017 Localización: En mi casa Estado: Sin conexión Puntos: 1536 |
Enviado: 03/Enero/2024 a las 23:15 |
|
A lo que se refiere Jesús con ese código, es que no es Visual Basic, pero sí que sirven los valores devueltos por ShellExecute. Por ejemplo, uniendo rápidamente sus 2 códigos:
|
|
![]() |
|
paloma
Habitual
Unido: 24/Junio/2010 Estado: Sin conexión Puntos: 139 |
Enviado: 12/Agosto/2025 a las 10:53 |
|
Hola, creo que falta que cierren este hilo, gracias.
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 12/Agosto/2025 a las 11:09 |
|
Los hilos se cierran cuando el usuario que lo abre lo solicita.
Entiendo que ya lo solucionaste. Un saludo.
|
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |