Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 要使用“图纸”属性,应引用哪个对象?_Excel_Vba - Fatal编程技术网

Excel 要使用“图纸”属性,应引用哪个对象?

Excel 要使用“图纸”属性,应引用哪个对象?,excel,vba,Excel,Vba,我试图查看A列中的单元格,从谷歌搜索栏中获取该公司的员工人数A将是公司名称员工人数。以下是Microsoft Internet控件和Microsoft HTML对象库的代码参考: Sub GetHits() Dim url As String, lastRow As Long Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object Dim start_time A

我试图查看A列中的单元格,从谷歌搜索栏中获取该公司的员工人数A将是公司名称员工人数。以下是Microsoft Internet控件和Microsoft HTML对象库的代码参考:

Sub GetHits()
Dim url As String, lastRow As Long
Dim XMLHTTP As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
Dim start_time As Date
Dim end_time As Date
Dim var As String
Dim var1 As Object
Dim oHtml As HTMLDocument
Dim oElement As Object
Set oHtml = New HTMLDocument

    lastRow = Range("A" & Rows.count).End(xlUp).Row

    Dim cookie As String
    Dim result_cookie As String

    start_time = Time
    Debug.Print "start_time:" & start_time

    For i = 2 To lastRow

        url = "https://www.google.com/search?q=" & Cells(i, 1)

        Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP")
        XMLHTTP.Open "GET", url, False
        XMLHTTP.setRequestHeader "Content-Type", "text/xml"
        XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
        XMLHTTP.send

        Set html = CreateObject("htmlfile")
        html.body.innerHTML = XMLHTTP.ResponseText
        Set oElement = oHtml.getElementsByClassName("Z0LcW")

        Sheets("Sheet1").Range("A" & i) = oElement(i).innerText
        i = i + 1

        DoEvents
    Next

    end_time = Time
    Debug.Print "end_time:" & end_time

    Debug.Print "done" & "Time taken : " & DateDiff("n", start_time, end_time)
    MsgBox "done" & "Time taken : " & DateDiff("n", start_time, end_time)
End Sub
运行时错误91-对象变量或未设置块变量

在这行输入:

Sheets("Sheet1").Range("A" & i) = oElement(i).innertext
我尝试将其更改为工作表集。也许是因为它是VBA而不是Vb.net?我读到一些关于Set在两个版本中不同的内容

我不认为这是因为我缺少引号,就像这里的另一个运行时错误问题一样,或者是因为拼写错误,等等

oElement已被设置为第9行的对象-Dim oElement as object

以下是a列的示例:

不清楚为什么在一次搜索一家公司时,返回的页面上至少有与您当时所在的Excel行相同数量的匹配div

除了公司名称之外,您的工作表与页面内容之间没有任何联系

Sheets("Sheet1").Range("A" & i) = oElement(0).innerText
可能更合适

这对我很有用:

Sub GetHits()
    Dim url As String
    Dim XMLHTTP As Object
    Dim oHtml As HTMLDocument, i As Long
    Dim oElement As Object, sht As Worksheet

    Set sht = ActiveSheet

    For i = 2 To sht.Range("A" & sht.Rows.Count).End(xlUp).Row

        url = "https://www.google.com/search?q=" & Cells(i, 1) & _
              " number of employees"
        With CreateObject("MSXML2.serverXMLHTTP")
            .Open "GET", url, False
            .setRequestHeader "Content-Type", "text/xml"
            .setRequestHeader "User-Agent", _
                "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
            .send
            Set oHtml = New HTMLDocument
            oHtml.body.innerHTML = .ResponseText
        End With

        Set oElement = oHtml.getElementsByClassName("Z0LcW")
        If oElement.Length > 0 Then sht.Range("B" & i) = oElement(0).innerText
    Next

End Sub

原谅我,我正在打电话

我看到您已经将oHtml设置为一个新的HTMLDocument,但我没有看到向它提供任何附加信息

因此,我假设以下代码:Set oElement=oHtml.getElementsByClassNameZ0LcW的意思是:

Set oElement=不会导致运行时错误的内容

当您将innerText应用于html对象而不是oHtml对象时,我将尝试:

设置oElement=html.getElementsByClassNameZ0LcW将html.body.innerHTML=XMLHTTP更改为oHtml.body.innerHTML=

或-更改设置oElement=oHtml。。。设置oElement=html.getElementsByCassName的步骤


然后,将oElementi.innerText更改为oElement0.innerText,因为您需要该类的第一个0索引响应。

您确定至少有3个oElement?IIRC它将从0开始索引这些元素。那将是A列中的公司数?是的,我总共有1300张,但我在一本新书中有一张样本表,所以表1和表10仅供测试之用。我有一个不同的程序,我一直在胡闹,但那只会给我逗号后的数字,而且只是有时,所以我切换到这个,我认为应该可以,但我一直得到那个错误我不确定你在a列有什么,但我试着用谷歌作为公司运行你的代码,返回的HTML根本没有类Z0LcW。您确定返回的HTML中存在该类吗?您正在查找的一个字符串是什么?例如:21世纪福克斯公司的员工人数将为您提供一个搜索页面,其中有一个大约22400个大框。我在十几个类似的搜索中检查了页面来源,我得到了这个div class:22400,因此a列来自Salesforce报告,那里有很多关于不同公司联系人的信息。我从6000个开始,删除了重复项,得到了大约1300个独特的公司名称。然后我做了一个简单的公司名称和员工人数来创建一个新单元。所以他们看起来像300万名员工,99美分的商店员工,A.Schulman Inc.的员工。等等。哦,它们被复制并粘贴了,当然只是一些值!不清楚为什么这是个错误?哈哈,所以我不会发疯吧?每页搜索只有一个结果。0返回相同的错误,不幸的是,如果您想要oElement0,那么循环中也有i=i+1,因此您将每隔一行跳过一行。如果你真的想要这种行为,请删除它或在for循环中使用步骤2。oElement0返回相同的错误不幸的是,另一个答案为我修复了它。嗯,这似乎给了我一个新的错误!哈哈,我将用我生成的所有错误开始一张相册:。这次:运行时错误“438”-对象不支持此属性或方法也许您不能将oElement=html设置为ohtml,但我不知道这是否重要,但错误实际上出现在下一行SheetsSheet1.RangeA&I=oElementi.innerTextThis适用于您Tim?也许我做错了什么不会是第一个哈哈!。因此,我简单地删除了这一行中html前面的o Set oElement=ohtml.getElementsByClassNameZ0LcW。然后得到上面的错误-'438'。我也尝试过实现你的更改,但仍然得到了错误代码。非常感谢你!你们两个都帮了我不少忙,真让我发疯!!!不用担心,很乐意帮忙。
Sub GetHits()
    Dim url As String
    Dim XMLHTTP As Object
    Dim oHtml As HTMLDocument, i As Long
    Dim oElement As Object, sht As Worksheet

    Set sht = ActiveSheet

    For i = 2 To sht.Range("A" & sht.Rows.Count).End(xlUp).Row

        url = "https://www.google.com/search?q=" & Cells(i, 1) & _
              " number of employees"
        With CreateObject("MSXML2.serverXMLHTTP")
            .Open "GET", url, False
            .setRequestHeader "Content-Type", "text/xml"
            .setRequestHeader "User-Agent", _
                "Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0"
            .send
            Set oHtml = New HTMLDocument
            oHtml.body.innerHTML = .ResponseText
        End With

        Set oElement = oHtml.getElementsByClassName("Z0LcW")
        If oElement.Length > 0 Then sht.Range("B" & i) = oElement(0).innerText
    Next

End Sub