Excel 使用集合运行时错误1004比较两个范围以查找不匹配和异常

Excel 使用集合运行时错误1004比较两个范围以查找不匹配和异常,excel,vba,collections,runtime-error,unique,Excel,Vba,Collections,Runtime Error,Unique,我一直遵循这个解决方案中的示例 并尝试将其与此解决方案相结合 但是,当我运行下面包含的代码时,我得到一个运行时错误“1004”:无法获取WoorkSheetClass的Vlookup属性如何克服该错误,以便删除楔形文字输入中不存在的行? Sub RemoveYdelser() 'Get Range From Datark To get range of Ydelses Group Set YdelsesStart = Worksheets("DATAARK").Range("O8") Set

我一直遵循这个解决方案中的示例 并尝试将其与此解决方案相结合

但是,当我运行下面包含的代码时,我得到一个运行时错误“1004”:无法获取WoorkSheetClass的Vlookup属性如何克服该错误,以便删除楔形文字输入中不存在的行?

Sub RemoveYdelser()

'Get Range From Datark To get range of Ydelses Group
Set YdelsesStart = Worksheets("DATAARK").Range("O8")
Set YdelsesSlut = Worksheets("DATAARK").Range("P8")

Dim LastRow As Long
LastRow = Worksheets("INPUT_MASTERDATA").Range("L" & Rows.Count).End(xlUp).Row

'Variable to get ydelser from Input_masterdata
Dim cUniqueInput As Collection
Dim Rng As Range
Dim Cell As Range
Dim shInput As Worksheet
Dim vNum As Variant

Set shInput = Worksheets("INPUT_MASTERDATA")
Set Rng = shInput.Range("L2:L" & LastRow)
Set cUniqueInput = New Collection

'Get unique values from Input_masterdata, column L
On Error Resume Next
    For Each Cell In Rng.Cells
        cUniqueInput.Add Cell.Value, CStr(Cell.Value)
    Next Cell
On Error GoTo 0

'Add exceptions for master ydelser not listed in column L
cUniqueInput.Add "x", CStr("x")
cUniqueInput.Add "R63011209", CStr("R63011209")
cUniqueInput.Add "R63011206", CStr("R63011206")

'Variable to get ydelser from Summary
Dim cUniqueYdelser As Collection
Dim RngYdelser As Range
Dim CellYdelser As Range
Dim shOpsumering As Worksheet
Dim xNum As Variant

Set shOpsumering = Worksheets("Summary")
Set RngYdelser = shOpsumering.Range("C" & YdelsesStart, "C" & YdelsesSlut)
Set cUniqueYdelser = New Collection

'Get unique values from Summary, column C
On Error Resume Next
    For Each CellYdelser In RngYdelser.Cells
        cUniqueYdelser.Add CellYdelser.Value, CStr(CellYdelser.Value)
    Next CellYdelser
On Error GoTo 0

'Does the values from cUniqueInput exist in cUniqueYdelser
For y = 1 To cUniqueYdelser.Count
    'If the value of a row in cUniqueYdelser does not exist in cUniqueInput, then remove entire row
    'This is where I get the runtime error
    If Application.WorksheetFunction.VLookup(cUniqueYdelser(y), cUniqueInput, 1, False) = "#N/A" Then 
        With Worksheets("OPSUMMERINGSARK").Cells
            .AutoFilter Field:=3, Criteria1:=cUniqueYdelser(y)
            .Range("C" & YdelsesStart, "C" & YdelsesSlut).EntireRow.Delete
        End With
    End If
Next y
尝试更改:

如果Application.WorksheetFunction.VLookup(cUniqueYdelser(y),cUniqueInput,1,False)=“\N/A”


未在集合上下文中测试要确定集合中是否存在项,请尝试按键检索该项,并查看是否存在错误(#9-下标超出范围)


您还可以设置对Microsoft脚本运行时的引用,并使用字典而不是集合。然后,您可以使用Exists方法查看密钥是否存在。

我找到了解决方案。问题是我试图在收藏中使用Vlookup。相反,我像这样循环浏览这些收藏

'Does the values from cUniqueInput exist in cUniqueYdelser
For Each ydelse In cUniqueYdelser
    Dim itemFoundYdelse As Boolean
    itemFoundYdelse = False

    For Each inputYdelse In cUniqueInput
        If ydelse = inputYdelse Then
            itemFoundYdelse = True
        Else
        'Item not found
        End If
    Next inputYdelse

    If itemFoundYdelse = False Then
            With Worksheets("Summary").Cells
                .AutoFilter Field:=3, Criteria1:=ydelse
                .Range("C" & YdelsesStart, "C" & YdelsesSlut).EntireRow.Delete
            End With
    End If
Next ydelse

我得到一个运行时错误1004:应用程序定义错误或对象定义错误。问题是我想在两个系列上做点什么?啊,很可能是这样。VLOOKUP期望一个范围作为其第二个参数。有两个选项可以将集合写入临时范围并继续使用VLOOKUP,或者简单地循环通过cUniqueInput集合来查找(或不查找)cUniqueYdelser(y)。无需循环。
'Does the values from cUniqueInput exist in cUniqueYdelser
For Each ydelse In cUniqueYdelser
    Dim itemFoundYdelse As Boolean
    itemFoundYdelse = False

    For Each inputYdelse In cUniqueInput
        If ydelse = inputYdelse Then
            itemFoundYdelse = True
        Else
        'Item not found
        End If
    Next inputYdelse

    If itemFoundYdelse = False Then
            With Worksheets("Summary").Cells
                .AutoFilter Field:=3, Criteria1:=ydelse
                .Range("C" & YdelsesStart, "C" & YdelsesSlut).EntireRow.Delete
            End With
    End If
Next ydelse