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