首页 > 解决方案 > 无法使用以下方法在相关列中写入结果

问题描述

我在 vba 中编写了一个脚本来抓取一些在从网页启动搜索时填充的名称。coulmn A我下面的脚本从in获取输入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 AfromRange("A2")到任何位置。

搜索输入:

Nike Care
Nike Cloud
Nike Construction
Nike Foundation
Nike Homes

我的问题是我怎样才能使这条线完全合格Sheets("Sheet2").cel(1, 2) = post.innerText

仅供参考,我只是按照我尝试和失败的方式寻求任何解决方案。

标签: vbaexcelweb-scrapingrange

解决方案


ItemRange对象的默认属性,我认为您正在使用您的工作版本访问它,即cel.item(1, 2). 它不是与Worksheetobject 一起使用的属性,并且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

推荐阅读