我对通过vba将公式放置到工作表中时遇到问题。该公式与数据透视表上的数据进行交互。当放置在工作表上的单元格Y8中时,以下公式将根据需要运行(非vba):
=IF(OR(L8="(blank)",L8=""),IF((K8-$A$2)/(365/12)<0,0,(K8-$A$2)/(365/12)),IF((L8-$A$2)/(365/12)<0,0,(L8-$A$2)/(365/12)))
想法是检查L8是null
还是(blank)
,如果是,则使用以下公式:IF((K8-$A$2)/(365/12)<0,0,(K8-$A$2)/(365/12))
。如果L8有一个值(将是一个日期),那么我想使用这个略有不同的公式:IF((L8-$A$2)/(365/12)<0,0,(L8-$A$2)/(365/12)))
。
L和K列在数据透视表中。
我使用activecell.formulaR1C1
将我的工作表公式转换为R1C1。我所做的唯一更改是在"(blank)"
-> ""(blank)""
周围添加了一组引号。
我在vba的公式行上仍收到运行时1004消息。
我的VBA代码在这里:
Sub PerformFormulas()
Dim LastRow As Long
LastRow = Worksheets("Calculator").Range("C" & Rows.Count).End(xlUp).Row
Worksheets("Calculator").Range("Y8:Y" & LastRow - 1).FormulaR1C1 = "=IF(OR(RC[-13]=""(blank)"",RC[-13]=""),IF((RC[-14]-R2C1)/(365/12)<0,0,(RC[-14]-R2C1)/(365/12)),IF((RC[-13]-R2C1)/(365/12)<0,0,(RC[-13]-R2C1)/(365/12)))"
End Sub
我检查了LastRow
和Calculator
是否被正确识别并且它们是正确的(我更改为简单的.select
公式,并且该部分代码可以正常工作)。
在此先感谢您的帮助!
答案 0 :(得分:1)
您没有逃避另外一对引号:
"=IF(OR(RC[-13]=""(blank)"",RC[-13]=""), ...
应该是
"=IF(OR(RC[-13]=""(blank)"",RC[-13]=""""), ...