Vba 在数组中搜索字符串时出现类型不匹配错误

Vba 在数组中搜索字符串时出现类型不匹配错误,vba,excel,Vba,Excel,我正在开发一个宏,它将合并两个不同的订单数据源。第一个源将包含旧订单和一些新订单,第二个源将仅包含旧订单,并在手动更新的列中包含其他数据 我的想法是从第二个来源获取订单总数,在第一个来源的订单总数之后将其粘贴到一张表中,然后根据现有跟踪器中的订单编号搜索新文件中的所有订单编号。我有一个for循环,它应该从新文件中查找尚未在跟踪器中的订单号,然后插入一行,其中包含订单详细信息。我在检查数组中是否存在字符串的if语句上收到类型不匹配错误。请查看此代码: Dim r As Integer For r

我正在开发一个宏,它将合并两个不同的订单数据源。第一个源将包含旧订单和一些新订单,第二个源将仅包含旧订单,并在手动更新的列中包含其他数据

我的想法是从第二个来源获取订单总数,在第一个来源的订单总数之后将其粘贴到一张表中,然后根据现有跟踪器中的订单编号搜索新文件中的所有订单编号。我有一个for循环,它应该从新文件中查找尚未在跟踪器中的订单号,然后插入一行,其中包含订单详细信息。我在检查数组中是否存在字符串的if语句上收到类型不匹配错误。请查看此代码:

Dim r As Integer
For r = 1 To 1000
    Dim NewOrd As String
    NewOrd = Range(Cells(r, 1), Cells(r, 1)).Value
    Dim ExistArray As Variant
    ExistArray = Range("a1", Range("a1").End(xlUp))
    Sheets("Sheet2").Select

    If IsEmpty(NewOrd) Then
        Exit For
    End If

    If Not UBound(Filter(ExistArray, NewOrd)) >= 0 And NewOrd <> "" Then
        Rows(r).Select
        Selection.Copy
        Sheets("Sheet3").Select
        Rows(r).Select
        Selection.Insert Shift:=xlDown
        Application.CutCopyMode = False
    End If
    r = r + 1
Next r
Dim r为整数
对于r=1至1000
作为字符串的Dim NewOrd
NewOrd=范围(单元格(r,1),单元格(r,1))。值
Dim Existaray作为变体
ExistArray=范围(“a1”,范围(“a1”)。结束(xlUp))
图纸(“图纸2”)。选择
如果我是空的,那么
退出
如果结束
如果未UBound(筛选器(ExistArray,NewOrd))>=0和NewOrd“”,则
行(r)。选择
选择,复制
图纸(“图纸3”)。选择
行(r)。选择
选择。插入移位:=xlDown
Application.CutCopyMode=False
如果结束
r=r+1
下一个r
我尝试了几种不同的设置数组的方法,尝试了添加option explicit,并尝试了嵌套循环(这不是我最聪明的效率时刻)。如果你能再看一眼,我将不胜感激


谢谢

将范围对象指定给数组始终会导致二维数组,这会导致错误

这样做:

ExistArray = Application.Transpose(Range("a1", Range("a1").End(xlUp)))
我想这应该能帮你解决

更新

您可能需要:

Dim ExistArray() As Variant
您的范围对象也是有问题的,因为它是单个单元格:

ExistArray = Application.Transpose(Array(Range("A1")))

根据需要将图纸名称从“Sheet1”和“Sheet2”更改为:

Sub tgr()

    Dim wsNew As Worksheet
    Dim wsTracker As Worksheet
    Dim rIndex As Long

    'This is the sheet that contains the new data that needs to be added
    Set wsNew = Sheets("Sheet1")

    'This sheet contains the old data
    Set wsTracker = Sheets("Sheet2")

    'Go through each row in the new data
    For rIndex = 1 To wsNew.Cells(Rows.Count, "A").End(xlUp).Row

        'Verify that the row isn't blank and that it doesn't already exist in wsTracker
        If Len(wsNew.Cells(rIndex, "A").Value) > 0 And WorksheetFunction.CountIf(wsTracker.Columns("A"), wsNew.Cells(rIndex, "A").Value) = 0 Then

            'This is a new item that needs to be added
            'Copy the row to the next available row in wsTracker
            wsNew.Rows(rIndex).Copy wsTracker.Cells(Rows.Count, "A").End(xlUp).Offset(1)

        End If
    Next rIndex

    Set wsNew = Nothing
    Set wsTracker = Nothing

End Sub

不幸的是,事实并非如此。代码在同一行中断(如果不是UBound…),并出现相同错误。是的,
Range(“a1”,Range(“a1”)。End(xlUp))
生成一个值。“a1”的第二次使用需要从下一步开始,使用“a1000”或
.Rows。按tigeravatar的代码计算
。问题出在您的范围对象上。@ExcelMacroStudent请参阅更新。您可能需要进行一些额外的测试,因为此方法仅在范围为一个单元格时有效。如果您的范围需要是多个单元格,那么前面的方法应该可以工作,您只需要优化范围对象的赋值。@DavidZemens我之前曾尝试使用with块设置数组,并使用Rows.count设置范围的结尾,但不知怎的,我在第二次(或第三次)时没有进行连接。谢谢!