公式VBA的应用程序定义或对象定义错误

时间:2017-05-29 07:49:03

标签: vba excel-vba formula vlookup excel

我是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循环中是否有编码错误?

提前致谢。

1 个答案:

答案 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"")"