从TextBox获取下拉框

时间:2014-01-24 19:19:31

标签: javascript vba

以下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

1 个答案:

答案 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?

祝你好运!