【发布时间】:2019-01-04 23:57:18
【问题描述】:
我知道有很多这样的问题;但我已经尝试从我见过的各种东西中实现一些东西,但还没有找到正确的结构。我不断收到应用程序/对象定义的错误。我确定是引号,但我似乎无法弄清楚我在哪里有太多与不够。最终目标是让这个公式出现在一定范围的行(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),"""")))))"
【问题讨论】:
-
尝试
...IF(E" & newrows ...并在其他地方重复该更改。 -
将
Range("R" & newrows & ":R1000").Formula =替换为Debug.Print,然后运行它并查看打印到即时窗格中的内容 (Ctrl+G) - 然后获取该输出,复制并粘贴到单元格中 - Excel会抱怨公式无效;在 Excel 中修复公式,然后返回代码并进行相应修复。 -
嗨,Mathieu,它在行调用周围显示“”:IE If("E"23=.......但是,如果我删除那组引号,我会得到预期的编译错误语句结束。
-
您想要的输出字符串中的每个双引号
"都需要转义,即加倍;所以a = """"正在分配一个包含单个"双引号字符的字符串文字。原因是"字符恰好是 字符串文字 分隔符标记,因此如果该字符需要出现在字符串文字中,则需要以某种方式进行转义:在 VBA 中,您可以转义 double通过将它们加倍来引用,就是全部。