Html 用VBA和模态形式处理IE
我正在尝试将excel文档自动上载到特定网页。我无法链接它,因为它需要一个帐户。有一个表单有一个浏览部分(type=file,所以我不能只设置值)和一个使用输入值的上传按钮 我可以导航到单击“浏览”按钮,也可以单击“上载”按钮,但当我单击“浏览”按钮时,会弹出一个名为“选择要上载的文件”的文件浏览器窗口,这意味着我无法与任何其他IE窗口交互,并暂停VBA代码,直到它关闭,这意味着我无法自动向它传递文件路径 页面上的相关HTML是Html 用VBA和模态形式处理IE,html,excel,vba,internet-explorer,modal-dialog,Html,Excel,Vba,Internet Explorer,Modal Dialog,我正在尝试将excel文档自动上载到特定网页。我无法链接它,因为它需要一个帐户。有一个表单有一个浏览部分(type=file,所以我不能只设置值)和一个使用输入值的上传按钮 我可以导航到单击“浏览”按钮,也可以单击“上载”按钮,但当我单击“浏览”按钮时,会弹出一个名为“选择要上载的文件”的文件浏览器窗口,这意味着我无法与任何其他IE窗口交互,并暂停VBA代码,直到它关闭,这意味着我无法自动向它传递文件路径 页面上的相关HTML是 <form method="post" name="uplo
<form method="post" name="uploadSkillForm" ENCTYPE="multipart/form-data" action='uploadSkills.do?operation=upload'>
<tr>
</tr>
<tr class="text1">
</tr>
<tr width="100%">
<td colspan="100%">
<table width="100%">
<tr>
<th align="left" colspan=3 width="60%">
<input type="file" name="uploadedFile" size="34" id="filePath" class="buttonStyle" style="height:20px"/>
<input type="button" name="upload" class="buttonStyle" value="Upload" onclick="javascript:fnUploadData()">
</th>
</tr>
</table>
</td>
</tr>
理想情况下,我只希望能够保持VBA运行并与对话框交互以放入文件路径,但任何将值设置为路径的方法都可以
VBA当前只打开网页并单击按钮,因此发布它没有意义
任何帮助都将不胜感激 因此,在深入挖掘之后,我决定让VBA运行一个外部脚本,检查窗口并输入文件名,然后按enter键。目前的问题是,它集中在文件窗口,因此如果您不在正确的文件夹中,它将不工作,但如果您在,它将选择正确的文件并单击打开 vba:
Dim retval As Variant
retval = Shell("PowerShell .'" & path & "upload_tester.ps1 file_name'", 1)
在存储路径的地方,upload_tester.ps1是脚本名,文件名将传递到脚本以输入到文件浏览器
剧本:
param(
[Parameter(Mandatory=$true)][string]$a
)
$wshell = new-object -com wscript.shell
while(! $wshell.appactivate("Choose File to Upload")){
start-sleep -milliseconds 100
}
$wshell.appactivate("Choose File to Upload")
start-sleep -milliseconds 500;
$wshell.sendkeys($a)
$wshell.sendkeys("{ENTER}")
这将一直检查,直到“文件资源管理器”窗口打开,键入与之匹配的文件名,然后按enter键选择它。如果有人知道如何让它集中在文本框部分,而不是文件浏览器部分,那将是伟大的,但这对我的工作目的 因此,在深入挖掘之后,我决定让VBA运行一个外部脚本,检查窗口并输入文件名,然后按enter键。目前的问题是,它集中在文件窗口,因此如果您不在正确的文件夹中,它将不工作,但如果您在,它将选择正确的文件并单击打开 vba:
Dim retval As Variant
retval = Shell("PowerShell .'" & path & "upload_tester.ps1 file_name'", 1)
在存储路径的地方,upload_tester.ps1是脚本名,文件名将传递到脚本以输入到文件浏览器
剧本:
param(
[Parameter(Mandatory=$true)][string]$a
)
$wshell = new-object -com wscript.shell
while(! $wshell.appactivate("Choose File to Upload")){
start-sleep -milliseconds 100
}
$wshell.appactivate("Choose File to Upload")
start-sleep -milliseconds 500;
$wshell.sendkeys($a)
$wshell.sendkeys("{ENTER}")
这将一直检查,直到“文件资源管理器”窗口打开,键入与之匹配的文件名,然后按enter键选择它。如果有人知道如何让它集中在文本框部分,而不是文件浏览器部分,那将是伟大的,但这对我的工作目的 很多年前,当我第一次开始开发时,我就遇到了这个问题。我通过创建一个简单的程序来解决这个问题,这个程序的唯一目的是监视弹出窗口的出现,然后将其杀死。这不是最好的解决方案,但100%有效。希望这能有所帮助。@Mickers,虽然不会放在文件路径中,是吗?我是否需要从VBA运行一个脚本,并将路径作为参数,才能做到这一点?很抱歉,我错过了你问题的这一部分。在我看来,这个按钮只是激活了模态,模态本身调用一个函数并传递文件路径。这是一个非常长的时间,但我记得有VBA执行javascript的方法。我将找到要调用的函数,并在关闭窗口后尝试从vba执行该函数。抱歉,我帮不上什么忙。在快速搜索之后,我找到了一个如何从vba调用js函数的示例。希望这会有帮助。很多年前,当我第一次开始开发时,我就遇到了这个问题。我通过创建一个简单的程序来解决这个问题,这个程序的唯一目的是监视弹出窗口的出现,然后将其杀死。这不是最好的解决方案,但100%有效。希望这能有所帮助。@Mickers,虽然不会放在文件路径中,是吗?我是否需要从VBA运行一个脚本,并将路径作为参数,才能做到这一点?很抱歉,我错过了你问题的这一部分。在我看来,这个按钮只是激活了模态,模态本身调用一个函数并传递文件路径。这是一个非常长的时间,但我记得有VBA执行javascript的方法。我将找到要调用的函数,并在关闭窗口后尝试从vba执行该函数。抱歉,我帮不上什么忙。在快速搜索之后,我找到了一个如何从vba调用js函数的示例。希望有帮助。