Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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,我正试图根据工作表中的可用值从网页中提取“href”链接到我的excel工作表。通过对一个值执行相同的操作,我是成功的,但我无法循环相同的操作 下面是一个运行良好的值的代码: Dim X As String X = ActiveCell.Value ' I have selected the cell "A1" before even starting the macro Set ElementCol = IE.document.getElementsByTagName("a") For Eac

我正试图根据工作表中的可用值从网页中提取“href”链接到我的excel工作表。通过对一个值执行相同的操作,我是成功的,但我无法循环相同的操作

下面是一个运行良好的值的代码:

Dim X As String
X = ActiveCell.Value ' I have selected the cell "A1" before even starting the macro
Set ElementCol = IE.document.getElementsByTagName("a")
For Each link In ElementCol
If link.innerHTML = Jesus Then
ActiveCell.Offset(0, 1).Value = link.href ' I will have the value in the "B1"
End If
Next
这是截图

现在,当我尝试循环代码运行时,所有单元格中的值都相同 这是我尝试的代码:

Dim intRowCount As Integer
Dim i As Integer
Dim X As String
X = ActiveCell.Value
intRowCount = Range("A1").CurrentRegion.Rows.Count
For i = 1 To intRowCount
Set ElementCol = IE.document.getElementsByTagName("a")
For Each link In ElementCol
If link.innerHTML = X Then
ActiveCell.Offset(0, 1).Value = link.href
ActiveCell.Offset(1, 0).Select
End If
Next
Next i
这是截图

我希望我能以一种可以理解的方式解释情况,请原谅我的任何错误。图片中的链接也是示例

以下是有效的返工代码:

X = Range("A1").CurrentRegion.Rows.Count
For i = 1 To X
ActiveCell.Offset(1, 0).Select
Dim Y As String
Jesus = ActiveCell.Value
Set ElementCol = IE.document.getElementsByTagName("a")
For Each link In ElementCol
If link.innerHTML = Y Then
ActiveCell.Offset(0, 1).Value = link.href
End If
Next
Next i

您应该避免使用
ActiveCell
,而只需完整引用单元格即可。您还使用
i
创建了一个循环,但未引用此循环

主要问题是,您正在循环外部设置
X
的值,然后将链接与该值进行比较,该值在每次迭代中都保持不变

请尝试以下操作:

Dim eRow As Long
Dim i As Long
Dim ws as Worksheet

Set ws = Thisworkbook.Sheets("SheetName")

eRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row
Set ElementCol = IE.document.getElementsByTagName("a")

For i = 1 To eRow
    For Each link In ElementCol
        If link.innerHTML = ws.Cells(i, 1).Value Then
            ws.Cells(i, 2).Value = link.href
        End If
    Next
Next i

您应该避免使用
ActiveCell
,而只需完整引用单元格即可。您还使用
i
创建了一个循环,但未引用此循环

主要问题是,您正在循环外部设置
X
的值,然后将链接与该值进行比较,该值在每次迭代中都保持不变

请尝试以下操作:

Dim eRow As Long
Dim i As Long
Dim ws as Worksheet

Set ws = Thisworkbook.Sheets("SheetName")

eRow = ws.Cells(ws.Rows.count, 1).End(xlUp).Row
Set ElementCol = IE.document.getElementsByTagName("a")

For i = 1 To eRow
    For Each link In ElementCol
        If link.innerHTML = ws.Cells(i, 1).Value Then
            ws.Cells(i, 2).Value = link.href
        End If
    Next
Next i

很抱歉延迟回复!!事实上,我们遭遇了飓风袭击,我们所有的互联网和移动网络都瘫痪了!!!我感谢您的即时回复,但是我太笨了,无法理解您的代码,所以我复制、粘贴了您的代码,但它可以工作!!!然而,我确实理解了你的建议“在循环外设置X值,然后比较链接”,所以我重新编辑了我的代码,它成功了!!!我把工作代码贴在了“原始帖子”部分。谢谢你,我感谢你及时的帮助。很抱歉,回复延迟了!!事实上,我们遭遇了飓风袭击,我们所有的互联网和移动网络都瘫痪了!!!我感谢您的即时回复,但是我太笨了,无法理解您的代码,所以我复制、粘贴了您的代码,但它可以工作!!!然而,我确实理解了你的建议“在循环外设置X值,然后比较链接”,所以我重新编辑了我的代码,它成功了!!!我将工作代码粘贴在“原始邮件部分”谢谢你,我感谢你的及时帮助