Html 用VBA和模态形式处理IE

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

我正在尝试将excel文档自动上载到特定网页。我无法链接它,因为它需要一个帐户。有一个表单有一个浏览部分(type=file,所以我不能只设置值)和一个使用输入值的上传按钮

我可以导航到单击“浏览”按钮,也可以单击“上载”按钮,但当我单击“浏览”按钮时,会弹出一个名为“选择要上载的文件”的文件浏览器窗口,这意味着我无法与任何其他IE窗口交互,并暂停VBA代码,直到它关闭,这意味着我无法自动向它传递文件路径

页面上的相关HTML是

<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"/>&nbsp;&nbsp;
                    <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函数的示例。希望有帮助。