windows - navigate - VBA: IE: ¿cómo asignar el nombre de ruta a la etiqueta de entrada de archivo sin el formulario de carga de archivo emergente?
internetexplorer.application vba (2)
Actualmente estoy haciendo automaiton para subir archivos
A continuación se muestra la etiqueta HTML para la etiqueta del archivo de entrada:
<input name="file" title="Type the path of the file or click the Browse button to find the file." id="file" type="file" size="20">
Y debajo está el botón Etiqueta HTML:
<input name="Attach" title="Attach File (New Window)" class="btn" id="Attach" onclick="javascript:setLastMousePosition(event); window.openPopup(''/widg/uploadwaiting.jsp'', ''uploadWaiting'', 400, 130, ''width=400,height=130,resizable=no,toolbar=no,status=no,scrollbars=no,menubar=no,directories=no,location=no,dependant=no'', true);" type="submit" value="Attach File">
Mi codificación de VBA es:
Dim filee As Object
Set filee = mydoc.getElementById("file")
filee.Value = filenamepath
Set attach = mydoc.getElementsByName("Attach")
attach(0).Click
Cuando estoy ejecutando esta codificación, el cuadro de entrada filepath no asigna el nombre de la ruta, así que estoy obteniendo la ruta del archivo.
Encontrar adjuntar captura de pantalla.
Finalmente he intentado debajo del código pero esa clave de envío no se está ejecutando
Dim filee As Object
Set filee = mydoc.getElementById("file")
filee.Click
obj.SetText filename
obj.PutInClipboard
SendKeys "^v"
SendKeys "{ENTER}"
Set attach = mydoc.getElementsByName("Attach")
attach(0).Click
Set finall = mydoc.getElementsByName("cancel")
finall(0).Click
Amablemente dígame el programa API de Windows para asignar mi nombre de archivo en el nombre correcto : cuadro de entrada en abierto Seleccione Archivo para abrir el explorador y haga clic en el botón Abrir .
Como la configuración del valor de un elemento de entrada de archivo está deshabilitada debido a razones de seguridad, el método de "enviar claves" parece ser la única opción para automatizar la carga de archivos mediante la API de IE.
Acabo de tropezar con el mismo problema que el código después del Click
no parece ejecutarse, es decir, a menos que el diálogo esté cerrado. Esto indica que el método Click
está bloqueando, por lo que es imposible interactuar con el cuadro de diálogo desde dentro de la macro.
Podría resolverlo usando un método diferente para abrir el diálogo: estableciendo el foco en el elemento de archivo con Focus
y enviando la tecla de espacio con SendKeys
.
En tu caso, reemplaza
filee.Click
con
filee.Focus
SendKeys " "
Solucioné este problema ejecutando una ruta de archivo VBScript externa para configurarlo en la ventana emergente ''Elegir archivo para cargar'' usando el método SendKeys después de enviar la tecla Enter para cerrar esta ventana emergente, y esta ejecución se realizó exitosamente porque el VBScript extraño se ejecuta en otro proceso no se pegará en el código VBA.
Notas: 1- Creo dinámicamente el VBScript externo a partir del código de VBA y lo guardo en la carpeta Temp después de que ejecuto este script usando WScript.Shell.Run para ejecutarlo en otro subproceso 1- Al comienzo del VBScript externo establezco 1 sec espere para asegurarse de que la ventana emergente ''Elegir archivo para cargar'' ya se haya abierto desde VBA.
Y aquí está el código completo:
....
....
Set filee = mydoc.getElementById("file")
CompleteUploadThread MyFilePath
filee.Foucs
filee.Click
....
....
Private Sub CompleteUploadThread(ByVal fName As String)
Dim strScript As String, sFileName As String, wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
''---Create VBscript String---
strScript = "WScript.Sleep 1000" & vbCrLf & _
"Dim wsh" & vbCrLf & _
"Set wsh = CreateObject(""WScript.Shell"")" & vbCrLf & _
"wsh.SendKeys """ & fName & """" & vbCrLf & _
"wsh.SendKeys ""{ENTER}""" & vbCrLf & _
"Set wsh = Nothing"
''---Save the VBscript String to file---
sFileName = wsh.ExpandEnvironmentStrings("%Temp%") & "/zz_automation.vbs"
Open sFileName For Output As #1
Print #1, strScript
Close #1
''---Execute the VBscript file asynchronously---
wsh.Run """" & sFileName & """"
Set wsh = Nothing
End Sub