我正在使用Excel VBA自动化网页。在这个页面上我必须上传一个文件,为此我必须单击Browse按钮,然后从窗口中选择文件“选择要上传的文件”。此问题以及此时VBA代码在等待选择文件时崩溃。
图片:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<Meta Name="Pragma" Content="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="/MYPAGE/js-css/calendario/calendario.css" type="text/css">
</link>
<link rel="stylesheet" href="/MYPAGE/js-css/Style.css" type="text/css" title="classico"/>
<link rel="stylesheet" href='/MYPAGE/css/dhtmlxmenu.css' type="text/css" title="classico"/>
<link rel="stylesheet" href='/MYPAGE/css/context.css' type="text/css" title="classico"/>
<style>
a {
font-family: arial, verdana;
font-size: 8pt;
}
#loading{
position:absolute;
left:300px;
top:180px;
z-index:1;
font:40px Arial, Helvetica, sans-serif;
color:#ffffff;
padding:20px;
background-color:#000000;
border:1px solid black;
/* for IE */
filter:alpha(opacity=60);
/* CSS3 standard */
opacity:0.6;
visibility: hidden;
}
</style>
<link rel="stylesheet" type="text/css" href='/MYPAGE/js-css/dhtmlxGrid/codebase/dhtmlxgrid.css' />
<script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/dhtmlxcommon.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/dhtmlxgrid.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/dhtmlxgridcell.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/ext/dhtmlxgrid_drag.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/ext/dhtmlxgrid_nxml.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/ext/dhtmlxgrid_selection.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/dhtmlxGrid/codebase/ext/dhtmlxgrid_deprecated.js"></script>
<script language="JavaScript" src='/MYPAGE/js-css/dhtmlxTreeGrid/codebase/dhtmlxtreegrid.js' ></script>
<script language="JavaScript" src="/MYPAGE/js-css/dhtmlGridCellSelfin.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/hashTable.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/calcola_totali.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/report.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/calendario/CalendarPopup.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/calendario/calendarFunction.js"></script>
<script language="JavaScript" src="/MYPAGE/js-css/standardFunction.js"></script>
<script language="Javascript" type="text/javascript">
var newwindow = '';
var mygrid;
var testata = "Nome File,Data,Caricatore,Operazione,MSISDN OK,MSISDN Scartate,MSISDN Doppie,Scarica Originale,Scarica Scarti,Scarica Doppi";
//var footer = "";
var ampiezzaColonne = "280,90,100,100,70,70,70,80,80,80";
var allineamento = "left,center,left,center,center,center,center,center,center,center";
var tipoColonne = "ro,ro,ro,ro,ro,ro,ro,ro,ro,ro";
var actionUrl = "/MYPAGE/ElencoFile.do";
var celleAbilitateDettaglio = "" ;
var celleAbilitateArray = celleAbilitateDettaglio.split(",");
var celleAbilitateTotali = "" ;
var celleTotaliArray = celleAbilitateTotali.split(",");
var coloreCelleDetail = "";
function doOnLoad(){
//loadError();
mygrid = new dhtmlXGridObject('gridbox');
buildTreeGrid();
}
function buildTreeGrid(){
mygrid.imgURL = '/MYPAGE/immagini/dhtmlxGrid/';
mygrid.setHeader(testata);
//mygrid.attachFooter(footer);
mygrid.setInitWidths(ampiezzaColonne);
mygrid.setColTypes(tipoColonne);
mygrid.setColAlign(allineamento);
mygrid.setOnLoadingStart(StartLoading);
mygrid.setOnLoadingEnd(StopLoading);
mygrid.enableAutoHeigth(true,"350");
//mygrid.enableAutoHeigth(false,"150","10");
mygrid.setOnRowDblClickedHandler(dettaglio);
mygrid.enableEditEvents(false, false, false);
mygrid.setOnKeyPressed(selezionaCelle);
mygrid.setColumnColor(coloreCelleDetail);
//PER LA FORMATTAZIONE USARE TYPE EDNRO UTILIZZIAMO le colonne per le quali calcolare i totali
mygrid.i18n.decimal_separator=",";
mygrid.i18n.group_separator=".";
for (var j = 0 ; j < celleTotaliArray.length; j++){
var tot = celleTotaliArray[j];
var ind = tot.substring(3);
mygrid.setNumberFormat("0,000",ind);
}
mygrid.init();
mygrid.enableBlockSelection();
mygrid.loadXML(actionUrl);
//mygrid.loadXML('/MYPAGE/pages/Test.xml');
}
function scaricaOriginale(valore){
document.ReportForm.action = "/MYPAGE/ScaricaCsv.do";
document.ReportForm.id.value = valore;
document.ReportForm.submit();
}
function scaricaScarti(valore){
document.ReportForm.action = "/MYPAGE/ScaricaScartati.do";
document.ReportForm.id.value = valore;
document.ReportForm.submit();
}
function scaricaDoppi(valore){
document.ReportForm.action = "/MYPAGE/ScaricaDoppi.do";
document.ReportForm.id.value = valore;
document.ReportForm.submit();
}
function scaricaListaVip(){
document.ReportForm.action = "/MYPAGE/ScaricaCvsDati.do";
document.ReportForm.submit();
}
function submitControl(){
var operation = document.forms[0].tipoOperazione.value;
var file = document.getElementById('uploadFile').value;
if (operation == 'null' || file == '')
alert('- Bisogna selezionare il tipo di operazione da eseguire \n- Bisogna specificare un file da caricare');
else{
document.getElementById("loading").style.visibility = "visible";
document.forms[0].submit();
}
}
function selezionaCelle(code,ctrl,shift) {
if(code==67&&ctrl){
mygrid.setCSVDelimiter("\t");
mygrid.copyBlockToClipboard();
return true;
}
}
function submitPrint(TipoStampa){
apriNuovaFinestra('/MYPAGE/pages/common/lanciaAction.jsp', 600 , 300);
}
//richiamato al momento dell'export consente l'apertura della finestra contenente la clessidra
</script>
</head>
<body onload="doOnLoad();">
<form name="FileUpload" method="post" action="/MYPAGE/LoadListe.do" enctype="multipart/form-data">
<div id="Text_Body">
>> Report Caricamento Liste
<div id="loading">
<img src="/MYPAGE/immagini/indicator.gif">
Loading...
</div>
<div id="body_content">
<div id ="Table">
<div id="tr">
<select name="tipoOperazione" class="tipoCalendario" style="width : 300pxpx;">
<option value="null">Selezionare un valore per l'operazione</option>
<option value="add">Inserimento</option>
<option value="del">Cancellazione</option>
</select>
   File:  
<input type="file" name="theFile" value="" style="width : 500pxpx;" id="uploadFile">
</div>
<br><br>
<div style="text-align: center; padding-top: 7px; padding-bottom: 7px;">
<img src='/MYPAGE/immagini/carica_off.gif'
onclick="javascript:submitControl();"
onmouseover="this.src='/MYPAGE/immagini/carica_on.gif'"
onmouseout="this.src='/MYPAGE/immagini/carica_off.gif'"
/>
<img src='/MYPAGE/immagini/scaricaCVS_off.gif'
onclick="javascript:scaricaListaVip();"
onmouseover="this.src='/MYPAGE/immagini/scaricaCVS_on.gif'"
onmouseout="this.src='/MYPAGE/immagini/scaricaCVS_off.gif'"
/>
</div>
</div>
</div>
<div id="gridbox" style=" width: 100%; height: 400px;" ></div>
<div id="msg_gridbox" class="messageGrid" ><IMG src="/MYPAGE/immagini/indicator.gif">Caricamento dati ...</div>
</div>
</form>
<form name="ReportForm" method="post" action="/MYPAGE/ScaricaCsv.do">
<input type="hidden" name="id" value="">
</form>
</html>
这是我的VBA代码:
Sub ie_automatic
Set objIE = New InternetExplorerMedium
objIE.Visible = True
objIE.Navigate "mylink"
objIE.FullScreen = False
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
objIE.Document.getElementById("j_user").Value = myuser
objIE.Document.getElementById("j_password").Value = mypsw
Application.Wait (Now + TimeValue("0:00:10"))
objIE.Document.getElementById("idsubmit").Click
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
For Each objLink In objIE.Document.frames(0).Document.body.getElementsByTagName("a")
If objLink.href = "mylink1" Then
objLink.Click
Exit For
End If
Next objLink
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:10"))
For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("select")(0).getElementsByTagName("option")
If element.innerText = "Cancellazione" Then
element.Selected = True
End If
Next
For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("input")
element.Click
Exit For
Next
For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("img")
If element.src = "mylink/carica_off.gif" Then
element.Click
End If
Next
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:10"))
For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("select")(0).getElementsByTagName("option")
If element.innerText = "Inserimento" Then
element.Selected = True
End If
Next
For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("input")
element.Click
Exit For
Next
'click tasto Carica
For Each element In objIE.Document.frames(0).Document.body.getElementsByTagName("img")
If element.src = "mylink/carica_off.gif" Then
element.Click
End If
Next
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:10"))
Application.SendKeys "(%{1068})"
DoEvents
Application.Wait (Now + TimeValue("0:00:10"))
End If
fine:
For Each objLink In objIE.Document.getElementsByTagName("a")
If objLink.href = "mylink/Logoff.do" Then
objLink.Click
Application.Wait (Now + TimeValue("0:00:10"))
Exit For
End If
Next objLink
objIE.FullScreen = False
objIE.Quit
Set objIE = Nothing
'Application.WindowState = xlNormal
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
'Application.WindowState = xlMinimized
Call emailimage
Application.WindowState = xlNormal
Application.Quit
End Sub
当我到达我创建元素的点并在等待您在对话框中选择文件时单击代码崩溃。
帮助我了解如何将值传递给控件
< input type = "File " name = "Thefile " value = "" style = "width: 500pxpx; " id = "uploadfile " >
如果我理解正确,它与函数Submitcontrol()相关联,而不必打开阻止一切的对话框?无限谢谢
这是我点击“浏览”按钮时显示的选择上传文件窗口:enter image description here