VBA: Excel данные в HTML-записи таблицы - PullRequest
0 голосов
/ 26 июня 2018

Я работаю над небольшим количеством кода VBA с целью взять информацию из моего рабочего листа в Excel и войти в таблицы на веб-странице.До сих пор мне удавалось заставить Internet Explorer открываться, на мой рабочий лист ссылаться.Код для таблицы, в которую я пытаюсь вставить данные, выглядит следующим образом:

    <td valign="top" align="right" class="label">
        Problem <br>Description
        <font color="red" size="+1">*</font>
    </td>
    <td class="data" colspan="5">
        <textarea name="eventVO.problemComments" cols="150" rows="3" id="eventVO.problemComments" class="data" title="Problem <br>Description">fffff</textarea>
    </td>

</tr>

Я получаю недопустимый аргумент при попытке изменить текстовое поле с помощью этого кода:

Sub FillInternetForm()

Dim wb As Workbook
Dim ws As Worksheet

Set wb = Workbooks("aqe.xlsm")
Set ws = wb.Worksheets("sheet1")
'open xlm for reference

Dim IE As Object
Set IE = New InternetExplorerMedium
'create new instance of IE
'With IE
IE.Navigate "url"
'go to all quality events
IE.Visible = True

'Dim Document As HTMLDocument
'Set Document = .Document
Set elems = IE.Document.getElementsByTagName("tr")
'For Each e In elems

lookFor = "<td>"

For x = 2 To 10

If elems.innerText Like "eventVO.problemComments" Then
'finding correct <tr>

    elems.getElementsByTagName("textarea").Value = ws.Cells("x, 9")
    'enter problem description
    'For x = 2 To 10

    'get full html inside the <tr><tr>
    'fullHTML = e.innerHTML

End If

Я получаю ошибку времени выполнения 438 после if elems.getElementsByTagName.Как обойти эту ошибку и установить значение для текстовой области описания проблемы в качестве значения ячейки?

1 Ответ

0 голосов
/ 26 июня 2018

У вас есть идентификатор, так что используйте его.Теоретически он должен быть уникальным.

IE.Document.getElementById("eventVO.problemComments")

Прочее:

Больше HTML и / или URL поможет в дальнейшем.

Однако, если вместо этого вы намереваетесь зацикливать коллекцию элементов с тегом textarea, то, согласно комментарию @TimWilliams, вы будете циклически перебирать коллекцию и получать доступ к отдельным элементам по индексу.Однако вам нужно исправить синтаксис присваивания, ws.Cells("x, 9") не будет работать, и я, вероятно, использовал бы селектор CSS, чтобы получить nodeList для обхода.


Селектор CSS:

.document.querySelectorAll("textarea[name='eventVO.problemComments']")

Это говорит, что выберите элементы с именем тега textarea, которые имеют атрибут name со значением 'eventVO.problemComments'.

В цикл возвращаются nodeList выможет иметь что-то вроде:

Dim x As Long, aNodeList As Object
Set aNodeList =IE.document.querySelectorAll("textarea[name='eventVO.problemComments']")

For x = 0 To aNodeList.Length -1

    aNodeList.Item(x) = ws.Cells(x+2,9)  '<Note how there is no "" inside the ()
   ' aNodeList(x) '<==potentially variation in syntax
Next x

Вы также можете просто зациклить коллекцию объектов класса textarea, проверяя имя:

Dim a As Object, b As Object
Set a = ie.document.getElementsByTagName("textarea") '<=collection

For Each b In a
    'On Error Resume Next ''<=This may potentially be needed if not all have a name attribute
    If InStr(1, b.getAttribute("name").innerText, "eventVO.problemComments") > 0 Then   'You might be able to just say If b.Name = eventVO.problemComments
     'Do something with the matched element
    End If
    'On Error GoTo 0
Next b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...