我是VBA的新手,遇到了
应用程序定义或对象定义的错误
在做的时候。
Set twb = ThisWorkbook
Set extwbk = Workbooks.Open("abc.xlsx")
Set x = extwbk.Worksheets("FILTERED").Range("$A:$A")
With twb.Sheets("FILTERED")
For rw = 9 To .Cells(Rows.Count, 1).End(xlUp).Row
.Cells(rw, 34).Formula = "=IF(ISERROR(VLOOKUP(.Cells(rw, 1).Value2, x, 1, False))=TRUE,""New"",""Old"")"
Next rw
End With
这可以手动完成,但我被要求通过编程来完成。它只是将AH9中的公式应用到数据的末尾。我可以知道for循环中是否有编码错误?
提前致谢。
答案 0 :(得分:2)
不要将VBA变量放在字符串公式中。 在VBA中解析它们并将结果注入公式:
.Formula = "=IF(ISERROR(VLOOKUP(" & .Cells(rw, 1).Value2 & "," & _
x.Address(External:=True) & ", 1, False))=TRUE,""New"",""Old"")"
P.S。不要使用=TRUE
来检查布尔值,If ISERROR(Something) = TRUE
之类的东西没有意义。只需If ISERROR(Something)
。
.Formula = "=IF(ISERROR(VLOOKUP(" & .Cells(rw, 1).Value2 & "," & _
x.Address(External:=True) & ", 1, False)),""New"",""Old"")"
如果您希望公式是动态的,并在将来(rw, 1)
处的单元格发生变化时进行相应重新计算,请使用.Address
代替.Value2
:
' vvvvvvvv
.Formula = "=IF(ISERROR(VLOOKUP(" & .Cells(rw, 1).Address & "," & _
x.Address(External:=True) & ", 1, False)),""New"",""Old"")"