2014-01-24 163 views
0

以下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;" /> 

我不是很熟悉編寫JavaScript函數的VBA,但我試圖把我的宏以下,但它創造了一個錯誤。

F = 「功能(hiddenvalue) 'http://www.bseindia.com/markets/equity/EQReports/StockPrcHistori.aspx?/StockReach/AdvanceStockReach.aspx?scripcode=500010')。價值= '真';}」 ie.Document.parentWindow.execScript樓 「的JScript」 ie.Document.getElementById( 「ctl00_ContentPlaceHolder1_GetQuote1_txtscrip_code」)點擊。

我在正確的軌道上,是在我的代碼JavaScript函數這裏什麼需要? TIA,Ron

+1

您正在查找的內容與組合框的行爲類似,該行爲在網頁中不存在。這些行爲是通過自定義代碼或庫「僞造」的。通常你會看到下拉是包含跨度的div,或者是包含li的ul。查看JQuery-UI自動完成功能,獲得一個簡單的解決方案。 – MaKR

+0

謝謝,但是當我搜索「JQuery-UI自動完成,vba」時,沒有命中 – ron

回答

0

您寫入值500010的輸入框在事件'onkyeup'中調用javascript函數'showDivSelect'。在該函數內部,ajax調用頁面http://www.bseindia.com/common/backpageAsset.aspx,結果顯示在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?

祝你好運!