用VBA和模态形式操纵IE

时间:2017-03-10 14:53:54

标签: html excel vba internet-explorer modal-dialog

我尝试自动将Excel文档上传到特定网页。我无法将其链接,因为它需要一个帐户。有一个带有浏览部分的表单(类型=文件,因此我只能设置值)和一个使用该输入值的上传按钮。

我可以导航到单击浏览按钮,然后我可以单击上传按钮,但是当我单击浏览按钮时,文件浏览器窗口名为"选择要上载的文件"弹出并意味着我无法与任何其他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目前只是打开网页并点击按钮,所以没有点发布它。

任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:0)

因此经过多次挖掘后我决定让VBA运行一个外部脚本来检查窗口并输入文件名然后按回车键。目前的问题是它专注于文件窗口,所以如果你不在正确的文件夹中它不起作用,但如果你是,它将选择正确的文件并点击打开!

vba:

Dim retval As Variant
retval = Shell("PowerShell .'" & path & "upload_tester.ps1 file_name'", 1)

路径所在的位置,upload_tester.ps1是脚本名称,file_name将传递给脚本输入到文件浏览器。

剧本:

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键将其选中。如果有人知道如何让它专注于文本框部分而不是文件浏览器部分,那将是伟大的,但否则这适用于我的目的!