2015-08-14 3 views
0

Я пытаюсь изменить это текстовое поле с помощью VBA:Введите значение в нестандартном HTML текстовое поле

<td id="ctl00_PlaceHolderMain_ctl00_PlaceHolderMain_ProfileEditorValueAboutMe" class="ms-authoringcontrols" valign="top" style="padding-left:10px;padding-right:10px;"><span class="ms-profilevalue"><span id="ctl00_PlaceHolderMain_ProfileEditorEditAboutMe"><DIV id="ctl00_PlaceHolderMain_ProfileEditorEditAboutMe_editableRegion" class="ms-rtestate-write ms-inputuserfield ms-long" contentEditable="true" InputFieldId="ProfileEditorEditAboutMe_hiddenRTEField" style="height:125px;overflow:scroll;background-color:white;"><p>text box content here</p></DIV></span> 
         <div class="ms-profiledescription" style="width: 386px; white-space:normal;">Please enter some details in the textbox</div> 
         </span> 
         <table border="0"> 
          <tr> 
           <td></td> 
          </tr> 
         </table> 
        </td> 

Вот VBA, который выполняет, как и ожидалось, кроме того, что текстовое поле не изменяется (либо на экране или когда форма сохраняется в случае щелчка):

Dim ie As InternetExplorerMedium 
Set ie = New InternetExplorerMedium 
ie.Visible = True 
ie.Navigate "URL" 

While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE 
    DoEvents 
Wend 


Debug.Print ie.Document.getelementbyid("ProfileEditorEditAboutMe_hiddenRTEField").Value 
ie.Document.getelementbyid("ProfileEditorEditAboutMe_hiddenRTEField").Value = "<p>123</p>" 
Debug.Print ie.Document.getelementbyid("ProfileEditorEditAboutMe_hiddenRTEField").Value 

ie.Document.all("Button1").Click 

свойство .value делает изменения, но текстовое поле не делает.

Буду благодарен за любые идеи. Как вы, наверное, можете сказать, я довольно новичок в веб-скриншоте VBA.

ответ

0

Поскольку вы сами манипулируете значением текстового поля, вам нужно запустить событие onchange, чтобы текстовое поле перерисовывалось с новым значением. Это делается путем создания объекта события, а затем вызова его через функцию dispatchEvent().

Dim e 
Set e = ie.Document.getelementbyid("ProfileEditorEditAboutMe_hiddenRTEField") 

' Set the value... 
e.Value = "123" 

' Fire the "onchange" event... 
Dim objEvent 
Set objEvent = ie.document.createEvent("HTMLEvents") 
objEvent.initEvent "change", False, True 
e.dispatchEvent objEvent 
+0

Спасибо. Я получаю объект, который не найден, и я считаю, что существует новый способ указания событий: https://msdn.microsoft.com/en-us/library/dn905219%28v=vs.85%29.aspx. Просто пытаюсь понять, как перевести это в новый синтаксис. – langbourne

+0

Должно работать нормально. Как отмечалось в статье, «синтаксис createEvent()/initEvent() остается функциональным в это время для поддержки обратной совместимости» _. Какая строка вызывает ошибку? – Bond

+0

Извините, если быть более точным, это ошибка «Объект не поддерживает это свойство или метод» в этой строке: Установите objEvent = ie.document.createEvent («HTMLEvents»). Может быть, потому, что я использую объект InternetExplorerMedium (который я должен по соображениям безопасности) – langbourne

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