需要帮助使用VBA将If和Vlookup公式input到单元格中

我创build了一个button,将新的工作条目添加到我的工作数据库中。 基于Cells (emptyRow,40) ,使用search“Job Category”工作表的Cells (emptyRow,43)并将结果输出到Cells (emptyRow,43) 。 因此,每当我添加一个新的工作条目时,我都希望Cells(emptyRow,43)input公式,并告诉我这是什么工作,如下所示

 Dim emptyRow As Long emptyRow = Range("Z100000").End(xlUp).Offset(1, 0).Row Cells(emptyRow, 43).Formula = "=IF(Cells(emptyRow,40)=0, "", VLOOKUP(Cells(emptyRow,40),'Job Category'!$G$10:$I$12, 3, TRUE))" 

但是,我收到此消息: "Run-time error '1004' : Application-defined or object-defined error."

有人知道为什么

您将工作表函数语法和VBA语法混搭在一起。 虽然可以使用WorksheetFunction对象从VLOOKUP函数返回结果,但似乎要将公式写入单元格。 由于emptyRowvariables,这可能会更好,因为xlR1C1样式公式。

 'as an xlA1 style Cells(emptyRow, 43).Formula = _ "=IF(AN" & emptyRow & "=0, """", VLOOKUP(AN" & emptyRow & ",'Job Category'!$G$10:$I$12, 3, TRUE))" 'as an xlR1C1 style Cells(emptyRow, 43).FormulaR1C1 = _ "=IF(RC40=0, """", VLOOKUP(RC40, 'Job Category'!R10C7:R12C9, 3, TRUE))" 

请记住,如果在引用的string中包含引号,则需要将引号加倍。

 Dim emptyRow As Long, addr as string emptyRow = Range("Z100000").End(xlUp).Offset(1, 0).Row addr = Cells(emptyRow,40).Address() Cells(emptyRow, 43).Formula = "=IF(" & addr & "=0, """", VLOOKUP(" & _ addr & ",'Job Category'!$G$10:$I$12, 3, TRUE))" 

你也可以使用iferror,

 Sub Button1_Click() Dim emptyRow As Long emptyRow = Cells(Rows.Count, "Z").End(xlUp).Row + 1 Cells(emptyRow, 43).Formula = "=IFERROR(VLOOKUP(AN" & emptyRow & ",'Job Category'!$G$10:$I$12,3,1),"""")" End Sub