Обработка IE в макросах Excel - PullRequest
0 голосов
/ 29 мая 2019

Я новичок в макросах Excel и пытаюсь автоматически заполнить текстовое поле, выбрать опцию из выпадающего меню и нажать «Отправить».

Используя макросы, я перешел на страницу и со страницы, мне нужно ввести текст в текстовое поле, и на основе предложения мне нужно выбрать опцию.

После того, как опция выбрана, мне нужно нажать продолжить, используя макросы.

Вот текущий код (я пробовал с закомментированной строкой, но он не работает).

Sub Create_Change()
    Dim i As Long
    Dim URL As String
    Dim IE As Object
    Dim objElement As Object
    Dim objCollection As Object
    Dim HWNDSrc As Long
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    URL = "URL to Navigate"
    IE.Navigate URL
    Application.StatusBar = URL & " is loading. Please wait..."
    Do While IE.ReadyState = 4: DoEvents: Loop
    Do Until IE.ReadyState = 4: DoEvents: Loop
    Application.StatusBar = URL & " Loaded"
    ' IE.Document.All("Search for a template").Value = "text to search"
    Set IE = Nothing
    Set objElement = Nothing
    Set objCollection = Nothing
End Sub

HTML КОД:

<input title="Search for a template" 
       class="change-template__search-input ng-pristine ng-untouched ng-valid" 
       role="combobox" 
       aria-expanded="false" 
       aria-owns="typeahead-258-8737" 
       aria-autocomplete="list" 
       type="text" 
       placeholder="Search for a template" 
       ng-enter="getRecommendedTemplates(template.search)" 
       ng-model="template.search" 
       typeahead="template as template for template in getTemplateList($viewValue)" 
       typeahead-focus-first="false" 
       typeahead-on-select="getRecommendedTemplates($item)" 
       typeahead-min-length="3">

Ответы [ 3 ]

0 голосов
/ 29 мая 2019

добро пожаловать в SO. Если вам нужно получить элемент, как сказал drHodge, обычно достаточно использовать итератор и какой-либо атрибут ID. Я попробовал это с Google минуту назад:

Dim Item As Object
For Each Item In IE.Document.all()
If Item.getAttribute("title") = "Buscar" Then
Item.Value = "Test"
End If
Next Item

Я также заставил его нажать пробел, стрелку вниз и войти, чтобы сделать что-то с предложением и поиском:

SendKeys ("{ }")
Application.Wait Now + TimeSerial(0, 0, 1)
SendKeys ("{DOWN}"), True
Application.Wait Now + TimeSerial(0, 0, 1)
SendKeys ("{ENTER}"), True

(я не рекомендую использовать SendKeys для любого скрипта, хотя это довольно ненадежно.)

0 голосов
/ 29 мая 2019

Вы можете попробовать следующее:

1) Фокус и изменение

With ie.document.querySelector("[title='Search for a template']")
    .focus
    .value = "abcd"
End With

2) Javascript set value

ie.document.parentWindow.execScript "document.querySelector('[title=\'Search for a template\']').value = 'abcd';"

3) Прикрепить событие и огонь

Dim evt As Object
Set evt = ie.document.createEvent("HTMLEvents")
evt.initEvent "change", True, False

With ie.document.querySelector("[title='Search for a template']")
    .Focus
    .Value = "abcd"
    .dispatchEvent evt
End With

4) FireEvent

With ie.document.querySelector("[title='Search for a template']")
    .Focus
    .Value = "abcd"
    .FireEvent "onchange"
End With
0 голосов
/ 29 мая 2019

Я думаю, вам нужно найти все элементы, возвращенные Document.All ().Попробуйте перебрать коллекцию, которая возвращается.Это намного проще, если у элемента управления есть идентификатор, но вам придется проверять каждый элемент, имеющий заголовок = «Поиск шаблона».Как только вы нашли элемент, вы можете установить текст.

Я предлагаю отладку, чтобы вы могли видеть, что .Все возвращается, а затем вы можете работать оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...