首页 > 解决方案 > VBA 公式应用程序/对象定义错误

问题描述

我知道那里有无数这样的问题;但是我已经尝试从我见过的各种东西中实现一些东西,但还没有找到正确的结构。我不断收到应用程序/对象定义的错误。我确定是引号,但我似乎无法弄清楚我在哪里有太多与不够。最终目标是让这个公式出现在一定范围的行(newrows 变量)之后,并在它填满每一行之后动态更新。

我尝试删除字符串部分周围的额外引号,但它在代码开头附近给了我一个“预期:语句结束”错误。当我在记事本 ++ 中查看它时,它看起来是正确的,但在 excel 中运行宏时仍然会在 VBA 本身中出现错误。

Range("R" & newrows & ":R1000").Formula = "=iferror(IF(""E""" & newrows & "= ""Planning"",VLOOKUP(""D""" & newrows & ",DataCheck4!A:F,3,FALSE),IF(""E""" & newrows & "=""Fieldwork"",VLOOKUP(""D""" & newrows & ",DataCheck4!A:F,4,FALSE),IF(""E""" & newrows & "=""Reporting"",VLOOKUP(""D""" & newrows & ",DataCheck4!A:F,5,FALSE),IF(""E""" & newrows & "=""Wrap Up"",VLOOKUP(""D""" & newrows & ",DataCheck4!A:F,6,FALSE),IF(""E""" & newrows & "=""Proj. Mgmt"",VLOOKUP(""D""" & newrows & ",DataCheck4!A:F,6,FALSE),"""")))))"

该代码应该根据行中单元格的值(E 列)和项目名称(D 列)来查找值。newrows 是由动态列表生成的数值变量。工作表的顶部有我不想覆盖的现有任务,但我希望该公式在该列表最后一行之后的所有单元格中。我一直在学习 VBA,因为我一直在从事这个项目,所以这可能是我还没有遇到过的东西,所以我很感激帮助!

ETA:今天早上,我尝试将带有 newrows 的序列转换为带有列字母的变量,并得到相同的应用程序定义错误。

firstloc = "E" & newrows
secondloc = "D" & newrows
Range("R" & newrows & ":R1000").Formula = "=iferror(IF(" & firstloc & "= ""Planning"",VLOOKUP(" & secondloc & ",DataCheck4!A:F,3,FALSE),IF(" & firstloc & "=""Fieldwork"",VLOOKUP(" & secondloc & ",DataCheck4!A:F,4,FALSE),IF(" & firstloc & "=""Reporting"",VLOOKUP(" & secondloc & ",DataCheck4!A:F,5,FALSE),IF(" & firstloc & "=""Wrap Up"",VLOOKUP(" & secondloc & ",DataCheck4!A:F,6,FALSE),IF(" & firstloc & "=""Proj. Mgmt"",VLOOKUP(" & secondloc & ",DataCheck4!A:F,6,FALSE),"""")))))"    

标签: excelvba

解决方案


蛇配方

如果DE是列字母,则

Sub SnakeFormula()

    Range("R" & newrows & ":R1000").Formula = "=iferror(IF(E" & newrows _
            & "=""Planning"",VLOOKUP(D" & newrows _
            & ",DataCheck4!A:F,3,FALSE),IF(E" & newrows _
            & "=""Fieldwork"",VLOOKUP(D" & newrows _
            & ",DataCheck4!A:F,4,FALSE),IF(E" & newrows _
            & "=""Reporting"",VLOOKUP(D" & newrows _
            & ",DataCheck4!A:F,5,FALSE),IF(E" & newrows _
            & "=""Wrap Up"",VLOOKUP(D" & newrows _
            & ",DataCheck4!A:F,6,FALSE),IF(E" & newrows _
            & "=""Proj. Mgmt"",VLOOKUP(D" & newrows _
            & ",DataCheck4!A:F,6,FALSE),""""))))))"

End Sub

推荐阅读