我正在尝试对多重匹配进行编码,以便在添加新记录之前检查表中是否存在记录。我一直在尝试使用'评估'来关注this示例。和'匹配'比较。我宁愿使用匹配而不是循环,因为最终表格可能非常大。
这是我到目前为止所做的:
Rem SheetString = Worksheets(WorkSite).Range("E1").Address(False, False, , True) & "&" & TblRng.Range(1, j).Offset(-5, 0).Address(False, False, , True) & "&" & TblRng.Range(1, j).Offset(-6, 0).Address(False, False, , True) & "&" & TblRng.Range(1, j).Offset(-2, 0).Address(False, False, , True)
SheetString = Worksheets(WorkSite).Range("E1").Address(False, False, , True) & "&" & _
TblRng.Range(1, j).Offset(-5, 0).Address(False, False, , True) & "&" & _
TblRng.Range(1, j).Offset(-6, 0).Address(False, False, , True) & "&" & _
TblRng.Range(1, j).Offset(-2, 0).Address(False, False, , True)
Rem RangeString = TblTrspt.ListColumns(1).Range.Address(False, False, , True) & "&" & TblTrspt.ListColumns(2).Range.Address(False, False, , True) & "&" & TblTrspt.ListColumns(3).Range.Address(False, False, , True) & "&" & TblTrspt.ListColumns(4).Range.Address(False, False, , True)
RangeString = TblTrspt.ListColumns(1).Range.Address(False, False, , True) & "&" & _
TblTrspt.ListColumns(2).Range.Address(False, False, , True) & "&" & _
TblTrspt.ListColumns(3).Range.Address(False, False, , True) & "&" & _
TblTrspt.ListColumns(4).Range.Address(False, False, , True)
Eval = Application.Evaluate("MATCH(" & SheetString & "," & RangeString & ",0)")
If IsError(Eval) Then
'add new item if not already in list
SheetString
是标准,RangeString
是要检查的表。它们需要一起检查,因为组合可能是唯一的,但每个字段将出现多次。
目前我无法编译这段代码,因为我得到了#34;应用程序定义的对象定义错误"在设置SheetString
的行上。
答案 0 :(得分:0)
假设WorkSite
是variable
,TblRng
是Range
而TblTrspt
是ListObject
;以下更改适用:
SheetString
目前我无法获得此代码进行编译 "应用程序定义的对象定义错误"在线上设置 SheetString。
将TblRng.Cells(1, j)
替换为TblRng.Cells(1, j)
,TblRng
为Range
而不是ListObject
,按照:
TblRng =工作表(WorkSite).Range(" Tbl"& WorkSite)
With TblRng.Cells(1, j)
SheetString = Worksheets(WorkSite).Range("E1").Address(External:=1)
SheetString = SheetString & Chr(38) & .Offset(-5, 0).Address(External:=1)
SheetString = SheetString & Chr(38) & .Offset(-6, 0).Address(External:=1)
SheetString = SheetString & Chr(38) & .Offset(-2, 0).Address(External:=1)
End With
将.Address(False, False, , True)
替换为.Address(External:=1)
,因为只需要外部参考。 references
是否“绝对”仅在公式将写入工作表并进一步复制时才有意义。
RangeString
With TblTrspt
RangeString = .ListColumns(1).Range.Address
RangeString = RangeString & Chr(38) & .ListColumns(2).Range.Address
RangeString = RangeString & Chr(38) & .ListColumns(3).Range.Address
RangeString = RangeString & Chr(38) & .ListColumns(4).Range.Address
End With
将.Address(False, False, , True)
替换为.Address
,与先前的评论一致。同样在这种情况下,External References
不需要Evaluate Method
,因为Worksheet
ListObject
位于TblTrspt
{/ 1}}。
要将Evaluate Method
应用于TblTrspt
所在的工作表。
Eval = TblTrspt.Parent.Evaluate("MATCH(" & SheetString & "," & RangeString & ",0)")
用Application.Evaluate
TblTrspt.Parent.Evaluate