【发布时间】:2020-08-24 00:57:54
【问题描述】:
我的目标:检查值是否存在,如果值不存在,则添加到 A 列的末尾。如果值存在,则跳过 ID 并检查下一个值。
实际结果:不管值是否存在,ID 都会添加到 A 行的末尾。因此我得到了重复。
我尝试使用“if”,但出现错误。
我的编码:
Option Explicit
Sub ExposeID()
Dim browser As Object 'Aufnehmen der verwendeten Instanz des Browsers (Internet Explorer)
Dim knotenAst As Object 'Aufnehmen einer HTML Struktur aus dem Browser Dokument
Dim n As Integer
Dim url As String 'Aufnehmen der auszulesenden Adresse
Dim ExposeID As String
Dim letztezeile As Integer
Dim nodeList As Object, i As Long
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
For n = 0 To 1
url = "https://www.
browser.navigate url
Do Until browser.readyState = 4: DoEvents: Loop
letztezeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Set nodeList = browser.document.querySelectorAll(".result-list__listing[data-id]")
For i = 0 To nodeList.Length - 1
''' HERE IS THE PROBLEM '''
If nodeList.Item(i).getAttribute("data-id") <> Cells.Range("A:A") Then
Cells(letztezeile + i + 1, 1) = nodeList.Item(i).getAttribute("data-id")
Else
End If
Next i
Next n
Set nodeList = Nothing
browser.Quit
End Sub
【问题讨论】:
-
试试这个:
If IsError(Application.Match(nodeList.Item(i).getAttribute("data-id"), Cells.Range("A:A"), 0)) Then. -
感谢您的评论。我已经添加了编码并尝试了。现在我没有错误。但是又出现了重复。
-
这可能发生在两个工作表中吗?我的意思是您曾经使用过
ActiveSheet,但在另外两次(Cells.Range..., Cells(letztezeile ...)中什么也没使用。 -
我已经更正了这一点。一切都发生在同一个工作表中。但它不会起作用。
Dim ws As Worksheet Set ws = Tabelle1 ws.Name = "IDs"
标签: excel vba for-loop if-statement web-scraping