Excel 如何通过宏插入公式?

Excel 如何通过宏插入公式?,excel,vba,Excel,Vba,这个问题已经解决了 不久前,当我对捕获数据进行一些更改时,我无意中打破了事情的顺序。当上面的代码运行时,[Date Out:][/code>列确实是空的,因此Excel报告正确 此后,我对公式输入进行了重新排序,现在表格工作正常,归功于@BigBen和@Michael Wycisk 我创建了一个Excel工作表,将其他几个Excel工作表中的数据合并到一个工作表中,以跟踪项目 我有一个公式,如果在后台打开源数据表的情况下,将其写入一系列单元格中,它就可以工作。如果在主工作表打开时要求宏将其放入

这个问题已经解决了

不久前,当我对捕获数据进行一些更改时,我无意中打破了事情的顺序。当上面的代码运行时,
[Date Out:][/code>列确实是空的,因此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"")"
WSR.Range(“ReportTable[Latest Portare Instance:”)=“=IFERROR”(如果([Date out:][=”,“Nothing Sent”),如果(和([Received by Serial:][=”,[Received by Asset:][=”),“Not Received by Asset:][Received][Received][Received][Received][Asset:][Received][Received][Received][Received][Received][Asset][Received][Asset][Received][2,1/(2,1/('Stock Movement Archive Defra.xlsx'!Archive[S/No:=$I2],'Stock Movement Archive Defra.xlsx'!Archive[Location:]),“发行”)
这是几个公式中的一个,所有公式都以相同的方式插入,其余的都有效。据我所知,公式插入正确,只是这一个在第一个if语句处停止


作为参考,我已尝试将第一个“if”语句更改为start
if([Date out:][code>”),然后公式在没有日期的情况下声明“Nothing Received”,或者在有日期的情况下提取正确的数据。还尝试更改“Date out”的格式列。

公式对我来说很合适。唯一的问题可能是您需要在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"")"
WSR.Range(“ReportTable[最新的Portare实例:”)。公式=“=IFERROR(如果([日期:]=”,“未发送”),如果(和([串行接收:]=”,[资产接收:]=”,“未接收”,“如果([资产接收:”),查找(2,1/('Stock Movement Archive Defra.xlsx')!归档[资产编号:=$J2),'Stock Movement Archive Archive Defra.xlsx'!归档[位置:],查阅(2,1/('Stock Movement Archive Defra.xlsx'!Archive[S/No:=$I2],'Stock Movement Archive Defra.xlsx'!Archive[Location:]),“问题”

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

使用公式>评估公式评估公式是否提供了更多详细信息?谢谢@BigBen,但运行评估不会引发任何问题。Excel如何知道
'Stock Movement Archive Defra.xlsx'
保存在何处?如果工作簿未打开,则需要完整路径。宏将打开所需的源代码表,以便数据可以被检索,一旦完成,它就会关闭源工作表。然后你能解释什么“但是如果我要求宏在主工作表打开时将其放入所需的单元格,那么公式就会失败”?什么是“主工作表打开时”意思是?也许我们需要更多的代码。嗨@Michael Wycisk,在代码中添加
.formula
属性恐怕没有任何效果。公式仍然在第一个“If”处停止声明。我刚刚看到您引用了一个外部工作表
库存移动存档Defra.xlsx
。当您测试公式时,它是否打开?您可以检查带有文件路径的完整引用是否有影响。此外,是否有机会查看该文件?是的,测试公式时源工作表打开。宏也会打开在运行所需的源代码表以挖掘数据时,将其备份,然后将其关闭。不幸的是,由于公司政策的原因,我无法共享实际文件,只是代码片段。真的很奇怪。我记得还有一件事,更新到SharePoint/OneDrive的连接可能会很棘手。但这里可能不是这种情况?