Не могу записать результаты в соответствующие столбцы, используя следующий подход - PullRequest
0 голосов
/ 27 августа 2018

Я написал скрипт в vba, чтобы очистить некоторые имена, появляющиеся при запуске поиска с веб-страницы.Мой скрипт ниже принимает входные данные из coulmn A в Sheet2 и записывает результат в column B рядом с соответствующими строками.Скрипт безошибочно напишет результаты, если я попытаюсь так:

Sheets("Sheet2").Cells(R + 1, 2) = post.innerText

или

cel(1, 2) = post.innerText

Но выдает ошибку (object doesn't support this property or method) когда я пытаюсь так:

Sheets("Sheet2").cel(1, 2) = post.innerText

Это сценарий:

Option Explicit
Sub FetchInfo()
    Const URL As String = "https://beta.companieshouse.gov.uk/search/companies?q="
    Dim Http As New XMLHTTP60, Html As New HTMLDocument
    Dim post As Object, cel As Range, R&

    For Each cel In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).row)
        With Http
            .Open "GET", URL & cel, False
            .setRequestHeader "User-Agent", "Mozilla/5.0"
            .send
            Html.body.innerHTML = .responseText
        End With

        Set post = Html.querySelector("#results li.type-company h3 a")
        If Not post Is Nothing Then
            R = R + 1: Sheets("Sheet2").Cells(R + 1, 2) = post.innerText  'working one
            cel(1, 2) = post.innerText  'working one
'            Sheets("Sheet2").cel(1, 2) = post.innerText 'doesn't work
        End If
    Next cel
End Sub

Чтобы получить результаты в column B, поместите входные данныев column A от Range("A2") до любого значения.

Входы Serch:

Nike Care
Nike Cloud
Nike Construction
Nike Foundation
Nike Homes

Мой вопрос: как я могу сделать эту строку полностью квалифицированной Sheets("Sheet2").cel(1, 2) = post.innerText

К твоему сведению, я ищу решение только так, как я пытался и не смог.

1 Ответ

0 голосов
/ 27 августа 2018

Item - это свойство по умолчанию для объекта Range, к которому, я думаю, вы обращаетесь с рабочей версией, т.е. cel.item(1, 2).Это не свойство для использования с Worksheet объектом, и cel, как переменная, не будет распознан как метод доступа к Worksheet.

Вы можете заключить его в распознанный член Range:

Range(cel(1, 2).Address)

Полная квалификация может быть следующей (пожалуйста, предоставьте кому-нибудь более короткий метод):

Debug.Print Worksheets(cel.Parent.NAME).Range(cel(1, 2).Address).Address(external:=True)

Согласно вашей реализации:

Sheets("Sheet1").Range(cel(1, 2).Address) = post.innerText
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...