2014-01-24 4 views
0

Следующий макрос excel vba откроет веб-страницу и вставляет «500010» в текстовое поле. Если вы вручную вводите один и тот же номер в текстовое поле, появится раскрывающийся список с последующими выборами. Это не происходит при вводе программного номера. Я пробовал несколько способов программно получить этот раскрывающийся список, чтобы показать, некоторые из них показаны в моем коде, но безрезультатно.Получить раскрывающийся список из TextBox

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, но я попытался положить следующий в моем макросе, но он создал ошибку.

е = "функция (hiddenvalue) 'http://www.bseindia.com/markets/equity/EQReports/StockPrcHistori.aspx?/StockReach/AdvanceStockReach.aspx?scripcode=500010') .value = 'True';}" ie.Document.parentWindow.execScript е, "JScript" ie.Document.getElementById ("ctl00_ContentPlaceHolder1_GetQuote1_txtscrip_code") Нажмите.

Я нахожусь на правильном пути, является функцией javascript в моем коде, что нужно здесь? Может ли кто-нибудь помочь мне придумать код, чтобы отобразить раскрывающийся список? .. TIA, Ron

+1

То, что вы ищете, похоже на поведение поля со списком, которое не существует на веб-страницах. Эти поведения «подделаны» через пользовательский код или библиотеку. Обычно то, что вы увидите в раскрывающемся списке, это div, содержащий пробелы, или ul, содержащие li. Посмотрите на автозаполнение JQuery-UI для нескольких простых решений. – MaKR

+0

Спасибо, но когда я обыскал «JQuery-UI autocomplete, vba», не было хитов – ron

ответ

0

В поле ввода, где вы пишете значение 500010, вызывается функция javascript 'showDivSelect' в событии 'onkyeup'. Внутри этой функции вызов ajax производится на странице http://www.bseindia.com/common/backpageAsset.aspx, и результаты отображаются в div divSelAsset_1 (имеет отображение: none). Таким образом, вы должны запустить событие onkeyup из VBA, но должны передать аргумент аргумента corrent (который, возможно, является экземпляром IDOMKeyboardEvent ... возможно ли создать объект KeyboardEvent в VBA?). ..

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 

... Но это не будет работать :-(

Может быть, вы могли бы попытаться вызвать функцию 'showDivSelect' из VBA непосредственно Эта функция имеет эту подпись:

function showDivSelect(e, flag, page, objtxtinput, valobjtxtinput, mintxtlength, what, varbool, bSusp) 

Выполнение JavaScript из VBA может быть возможно как это:

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?

Удачи!

Смежные вопросы