VBA从Internet Explorer的下拉菜单中select

编辑:我清理了源代码格式并更新了我的VBA代码。 我不再有一个错误,但没有任何事情发生在我的浏览器窗口(没有select,没有任何点击)。

我有一些VBA代码,允许用户在Excel中input信息。 代码将获取这些信息,并生成一个地址到我们内部网上的一个页面。 在该页面上有一个下拉列表来select导出格式,select格式后,用户可以点击导出文件。

我试过的VBA代码(和几个变体)如下:

Public Sub window_Open(strLocation As String, Menubar As Boolean, height As Long, width As Long, resizable As Boolean) With CreateObject("InternetExplorer.Application") .Visible = False .height = height .width = width .Menubar = Menubar .Visible = True .resizable = True .Navigate strLocation End With End Sub Private Sub OKButton_Click() Dim ProductionAddress As String ProductionAddress = "http://Collapsed" window_Open ProductionAddress, True, 800, 1000, False Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.Navigate ProductionAddress While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend ie.document.getelementbyid("ReportViewerControl_ctl01_ctl05_ctl00").Value = "EXCEL" Set objButton = ie.document.getelementbyid("ReportViewerControl_ctl01_ctl05_ctl01") objButton.Focus objButton.Click End Sub 

下面是我尝试导航的页面的源代码。 selectEXCEL的元素:

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <style> body, frameset, form { margin: 0px; padding: 0px; } .PageNumberText, input, button, select, table, body, frameset { font-size: 8pt; font-family: Verdana; } .ToolbarExport { display: inline; } .WidgetSet { height: 30px; } .ToolBarButtonsCell { padding-left: 6px; } .MenuBarBkGnd { background-color: #ECE9D8; } </style> </head> <body style="margin: 0px; overflow: auto;"><form name="ReportViewerForm" id="ReportViewerForm" action="ReportViewer.aspx?%2fProduction%2fWell+Daily+Production&amp;StartDate=01%2f01%2f2015+00%3a00%3a00&amp;EndDate=07%2f21%2f2015+00%3a00%3a00&amp;WellName=Acadia&amp;rs%3aParameterLanguage=&amp;rc%3aParameters=Collapsed" method="post"><table id="ReportViewerControl" style="width: 100%; height: 100%;" onclick="if (document.getElementById('ReportViewerControl_ctl00') != null) document.getElementById('ReportViewerControl_ctl00').ParametersController.HideActiveDropDown();" onactivate="if (document.getElementById('ReportViewerControl_ctl00') != null) document.getElementById('ReportViewerControl_ctl00').ParametersController.HideActiveDropDown();" cellspacing="0" cellpadding="0"><tbody><tr><td><div class="MenuBarBkGnd"><div class="ToolBarButtonsCell"><div class="ToolbarExport WidgetSet"><table style="display: inline;" cellspacing="0" cellpadding="0"><tbody><tr><td height="28"><select name="ReportViewerControl$ctl01$ctl05$ctl00" title="Export Formats" id="ReportViewerControl_ctl01_ctl05_ctl00" onchange="document.getElementById('ReportViewerControl_ctl01_ctl05_ctl01').Controller.SetViewerLinkActive(document.getElementById('ReportViewerControl_ctl01_ctl05_ctl00').selectedIndex != 0);"><option value="EXCEL">Excel</option></select></td></tr></tbody></table></div></div></div></td></tr></tbody></table></form></body> </html> 

以及导出元素的源代码:

  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <style> .DisabledLink { font-size: 8pt; font-family: Verdana; color: gray; text-decoration: none; cursor: default; } body, frameset, form { margin: 0px; padding: 0px; } .PageNumberText, input, button, select, table, body, frameset { font-size: 8pt; font-family: Verdana; } .ToolbarExport { display: inline; } .WidgetSet { height: 30px; } .ToolBarButtonsCell { padding-left: 6px; } .MenuBarBkGnd { background-color: #ECE9D8; } </style> </head> <body style="margin: 0px; overflow: auto;"><form name="ReportViewerForm" id="ReportViewerForm" action="ReportViewer.aspx?%2fProduction%2fWell+Daily+Production&amp;StartDate=01%2f01%2f2015+00%3a00%3a00&amp;EndDate=07%2f21%2f2015+00%3a00%3a00&amp;WellName=Acadia&amp;rs%3aParameterLanguage=&amp;rc%3aParameters=Collapsed" method="post"><table id="ReportViewerControl" style="width: 100%; height: 100%;" onclick="if (document.getElementById('ReportViewerControl_ctl00') != null) document.getElementById('ReportViewerControl_ctl00').ParametersController.HideActiveDropDown();" onactivate="if (document.getElementById('ReportViewerControl_ctl00') != null) document.getElementById('ReportViewerControl_ctl00').ParametersController.HideActiveDropDown();" cellspacing="0" cellpadding="0"><tbody><tr><td><div class="MenuBarBkGnd"><div class="ToolBarButtonsCell"><div class="ToolbarExport WidgetSet"><table style="display: inline;" cellspacing="0" cellpadding="0"><tbody><tr><td height="28"><a title="Export" class="DisabledLink" id="ReportViewerControl_ctl01_ctl05_ctl01" onmouseover="this.Controller.OnLinkHover();" onmouseout="this.Controller.OnLinkNormal();" onclick="
var formatDropDown = document.getElementById('ReportViewerControl_ctl01_ctl05_ctl00');
if (formatDropDown.selectedIndex == 0)
return false;
window.open(document.getElementById('ReportViewerControl').ClientController.m_exportUrlBase + encodeURIComponent(formatDropDown.value), '_blank')
formatDropDown.selectedIndex = 0;
document.getElementById('ReportViewerControl_ctl01_ctl05_ctl01').Controller.SetViewerLinkActive(document.getElementById('ReportViewerControl_ctl01_ctl05_ctl00').selectedIndex != 0);return false;" href="#"><script type="text/javascript"> document.getElementById('ReportViewerControl_ctl01_ctl05_ctl01').Controller = new ReportViewerLink("ReportViewerControl_ctl01_ctl05_ctl01", false, "ActiveLink", "DisabledLink", "", "", ""); </script>Export</a></td></tr></tbody></table></div></div></div></td></tr></tbody></table></form></body> </html> 

谢谢!

您需要先导航到页面才能加载文档 – 然后使用下面的代码:

 ie.Document.GetElementByID("ReportViewerControl_ctl01_ctl05_ctl00").Value = "EXCEL" 

使用<option>标签内的<option>


导航:

 ie.Navigate ProductionAddress While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend ie.Document.GetElementByID("ReportViewerControl_ctl01_ctl05_ctl00").Value = "EXCEL" 

我真的很难得到这个代码的工作,我发现没有任何现有的问题有明确的答案,所以我想包括我最终使用的代码工作:

 Private Sub OKButton_Click() Dim ProductionAddress As String ProductionAddress = "http://Collapsed" Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") With ie .Silent = True .Visible = True .Navigate ProductionAddress End With While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend ie.document.getelementbyid("ReportViewerControl_ctl01_ctl05_ctl00").Value = "EXCEL" Set objButton = ie.document.getelementbyid("ReportViewerControl_ctl01_ctl05_ctl01") objButton.Focus objButton.Click End Sub 

这打开了从下拉列表中select的页面,并成功通过ID单击了一个元素。