以下excel vba宏将打开一个网页并插入" 500010"进入文本框。如果您在文本框中手动键入相同的数字,则会出现一个下拉框,其中包含更多选项。程序编号输入不会发生这种情况。我已尝试了多种方法以编程方式显示此下拉框,我的代码中显示了一些,但无济于事。
Sub test()
URL = "http://www.bseindia.com/markets/equity/EQReports/StockPrcHistori.aspx?expandable=7&flag=0"
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate URL
Do Until (ie.readyState = 4 And Not ie.Busy)
DoEvents
Loop
ie.Document.getElementById("ctl00_ContentPlaceHolder1_GetQuote1_txtscrip_code").Value = 500010
' click the textbox to get the dropdown box to appear
ie.Document.getElementById("ctl00_ContentPlaceHolder1_GetQuote1_txtscrip_code").fireevent ("onClick")
ie.Document.getElementById("ctl00_ContentPlaceHolder1_GetQuote1_txtscrip_code").Click
end sub
如果我查看网页的源代码,我会在有关文本框的信息之前看到以下内容。
<script type="text/javascript">
function cleartext1(a) {
if (a.value == "Scrip code/Scrip Name")
a.value = '';
}
function Filltext1() {
a.value == "Scrip code/Scrip Name"
}
function ClearTextBox(a)
{
if (a.value == a.defaultValue) a.value = "";
}
function FillTextBox(a)
{
if (a.value == "") a.value = a.defaultValue;
}
function HiddenValue(hdn) {
var hvalue = document.getElementById(hdn).value;
if (hvalue != "")
{
var s1=hvalue.split("|");
location.href = "/StockReach/AdvanceStockReach.aspx?scripcode=" + s1[0];
return true;
}
else
return false;
}
// function chk(e)
// {
// if(window.event)
// {
// var key=window.event.keyCode;
// if (key == 13)
// {
// var btn = document.getElementById('btnGetQuote');
// // HiddenValue('hdnIdAsset');
//
// btn.click();
// //btn.focus();
// }
// }
// }
</script>
<div id="ctl00_ContentPlaceHolder1_GetQuote1_Pn1" onkeypress="return noenter(event);">
<table border="0" cellspacing="0" cellpadding="2" align="left">
<tr>
<td style ="padding-right:10px;">
<input value="" id="divshow" type="hidden" />
<input value="" id="hdnIdAsset" type="hidden" /><input name="ctl00$ContentPlaceHolder1$GetQuote1$hdnValue" type="hidden" id="ctl00_ContentPlaceHolder1_GetQuote1_hdnValue" />
<input name="ctl00$ContentPlaceHolder1$GetQuote1$txtscrip_code" type="text" maxlength="500" id="ctl00_ContentPlaceHolder1_GetQuote1_txtscrip_code" value="Scrip code/Scrip Name" class="textbox2" onclick="javascript:selecttxt(this);" onkeypress="javascript:noenter(event);return chkkey(event,this);" onfocus="cleartext1(this);" onblur="FillTextBox(this)" onkeyup="javascript:showDivSelect(event,'Asset','http://www.bseindia.com/common/backpageAsset.aspx',this,this.value,3,'0',false);" style="width:160px;" />
我不太熟悉为vba编写javascript函数,但我尝试将以下内容放在我的宏中,但它创建了一个错误。
f =&#34;功能(隐藏价值)&#39; http://www.bseindia.com/markets/equity/EQReports/StockPrcHistori.aspx?/StockReach/AdvanceStockReach.aspx?scripcode=500010&#39;)。value =&#39; True&#39 ;;}&#34; ie.Document.parentWindow.execScript f,&#34; jscript&#34; ie.Document.getElementById(&#34; ctl00_ContentPlaceHolder1_GetQuote1_txtscrip_code&#34)。按此
我是否在正确的轨道上,在我的代码中是一个javascript函数,这里需要什么?有人可以帮我提出代码来显示下拉框吗?.. TIA,Ron
答案 0 :(得分:0)
您在其中写入值500010的输入框在事件'onkyeup'中调用javascript函数'showDivSelect'。在此函数内部,对页面http://www.bseindia.com/common/backpageAsset.aspx进行ajax调用,结果显示在div“divSelAsset_1”中(显示:无)。所以你必须从VBA发出'onkeyup'事件但必须传递corrent事件参数(可以说是IDOMKeyboardEvent实例......是否可以在VBA中创建KeyboardEvent对象?)。
Dim evt As IDOMKeyboardEvent
Set evt = doc.createEvent("KeyboardEvent")
' evt.Key = "5" ... Key is read-only, so how to say which Key should the event be for?
Dim txtscrip_code As HTMLInputElement
Set txtscrip_code = ie.document.getElementById("ctl00_ContentPlaceHolder1_GetQuote1_txtscrip_code")
txtscrip_code.Focus
txtscrip_code.FireEvent "onkeyup()", evt
......但这不起作用: - (。
也许你可以尝试直接从VBA调用函数'showDivSelect'。此功能具有以下签名:
function showDivSelect(e, flag, page, objtxtinput, valobjtxtinput, mintxtlength, what, varbool, bSusp)
可以像这样从VBA执行javascript:
ie.document.parentWindow.execScript("code", "JavaScript")
看看,例如这里: http://msdn.microsoft.com/en-us/library/ie/ms536420(v=vs.85).aspx
在javascript中你可以像这样创建键盘事件: In JavaScript, how can I create my own Keyboard event?
祝你好运!