【问题标题】:How to insert a formula by macro?如何通过宏插入公式?
【发布时间】:2020-01-31 16:35:41
【问题描述】:

问题已经解决了。

似乎不久前我在进行一些更改以捕获数据时,无意中破坏了事物的顺序。当上面的代码运行时,[Date Out:] 列确实是空的,所以 Excel 可以正确报告。

我已经对公式的输入进行了重新排序,现在工作表可以正常工作,这归功于@BigBen 和@Michael Wycisk。


我创建了一个 Excel 工作表,将其他几个 Excel 工作表中的数据合并为一个以跟踪项目。

我有一个公式,如果它被写入一系列单元格,源数据表在后台打开,则该公式有效。如果我要求宏在主工作表打开时将其放入所需的单元格,则公式将失败。通过“失败”,我的意思是公式检查它的第一列以查看数据是否存在,然后确定该列是空的,因此如果“日期输出”列中有日期,则错误地报告“未发送任何内容” .

这是有问题的行。

WSR.Range("ReportTable[Latest Portare Instance:]") = "=IFERROR(IF([Date out:]="""",""Nothing Sent"",IF(AND([Received by Serial:]="""",[Received by Asset:]=""""),""Not Received"",IF([Received by Asset:]<>"""",LOOKUP(2,1/('Stock Movement Archive Defra.xlsx'!Archive[Asset No:]=$J2),'Stock Movement Archive Defra.xlsx'!Archive[Location:]),LOOKUP(2,1/('Stock Movement Archive Defra.xlsx'!Archive[S/No:]=$I2),'Stock Movement Archive Defra.xlsx'!Archive[Location:])))),""Issue"")"

这是几个公式之一,都以相同的方式插入,其余的工作。据我所知,公式已正确插入,只是这个公式在第一个 if 语句处停止。

作为参考,我尝试将第一个“if”语句更改为以IF([Date out:]&lt;&gt;"""" 开头,然后该公式要么在没有日期的情况下声明“未收到任何内容”,要么在有日期的情况下提取正确的数据。还尝试更改“Date Out”列的格式。

【问题讨论】:

  • Formulas > Evaluate Formula 评估公式是否提供更多详细信息?
  • 谢谢@BigBen,但运行评估并没有引发任何问题。
  • Excel 如何知道'Stock Movement Archive Defra.xlsx' 的保存位置?如果工作簿未打开,则需要完整路径。
  • 宏打开所需的源表以便可以检索数据,完成后关闭源表。
  • 您能否解释一下“但是如果我要求宏在主工作表打开时将其放入所需的单元格中,那么公式将失败”? “当主表打开时”是什么意思?也许我们需要更多代码。

标签: excel vba


【解决方案1】:

这个公式对我来说很好。唯一的问题可能是您需要在 Range 对象之后使用.Formula 属性:

WSR.Range("ReportTable[Latest Portare Instance:]").Formula = "=IFERROR(IF([Date out:]="""",""Nothing Sent"",IF(AND([Received by Serial:]="""",[Received by Asset:]=""""),""Not Received"",IF([Received by Asset:]<>"""",LOOKUP(2,1/('Stock Movement Archive Defra.xlsx'!Archive[Asset No:]=$J2),'Stock Movement Archive Defra.xlsx'!Archive[Location:]),LOOKUP(2,1/('Stock Movement Archive Defra.xlsx'!Archive[S/No:]=$I2),'Stock Movement Archive Defra.xlsx'!Archive[Location:])))),""Issue"")"

为了确保您的公式正确(您说在输入单元格时可以正常工作),您可以在单元格中输入它,选择单元格,然后在 VBE 内的即时窗口中输入 ?ActiveCell.Formula(不要'不要忘记检查引号是否正确)。

【讨论】:

  • 嗨@Michael Wycisk,恐怕将.formula 属性添加到代码中没有任何效果。公式仍停留在第一个“If”语句处。
  • 我刚刚看到您引用了外部工作表Stock Movement Archive Defra.xlsx。测试公式时是否打开?您可以检查带有文件路径的完整引用是否有所不同。除此之外,还有机会看一下文件吗?
  • 是的,在测试公式时源工作表是打开的。宏还在运行以挖掘数据时打开所需的源表,然后将其关闭。不幸的是,由于公司政策,我无法分享实际文件,只能分享代码。
  • 真的很奇怪。我记得的另一件事是更新与 SharePoint/OneDrive 的连接可能很棘手。但这可能不是这里的情况?
猜你喜欢
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
相关资源
最近更新 更多