我尝试在VBA中编写代码将此公式插入到单元格中失败了
公式:
=IFERROR(IF(OR(E10=0,D9=0),0,NETWORKDAYS(D9,E9))," ")
我在VBA中尝试过的一个例子:
Sub inputWorkdays() Range("h9").Formula = "=IFERROR(IF(OR(E9=0,D9=0),0,NETWORKDAYS(D9,E9)),""Yes"")" End Sub
我试图从上面添加公式到单元格H9。
select具有公式的单元格并写入以下内容:
Sub TestMe debug.print Selection.Formula debug.print Selection.FormulaR1C1 End sub
在你的情况下,它会给:
=IFERROR(IF(OR(E10=0,D9=0),0,NETWORKDAYS(D9,E9)),"YES") =IFERROR(IF(OR(R[-4]C[-1]=0,R[-5]C[-2]=0),0,NETWORKDAYS(R[-5]C[-2],R[-5]C[-1])),"YES")
拿第一个,像这样使用它:
Range("h9").Formula = "=IFERROR(IF(OR(E10=0,D9=0),0,NETWORKDAYS(D9,E9)),""YES"")"
我从评论中收集到没有错误,只是“没有任何反应”。 我看到你的代码没有错。 除…
Range("h9").Formula = "..."
当Range
不合格时 ,您隐式引用ActiveSheet
; 如果活动工作表不是您希望写入的工作表,那么很容易得出结论:“没有任何事情发生”,并且代码不起作用。
如果你已经安装了Rubberduck (完全公开:我大量参与了这个开源的VBE插件的开发),你会发现Range
在这种情况下是Excel._Global
的成员,检查结果会告诉你隐式引用了ActiveSheet
:
Range("H9").Formula = "..."
对活动工作表的隐式引用会使代码变得脆弱而难以debugging。 考虑在预期的时候使这些引用明确,并且更喜欢使用对象引用。
http://rubberduckvba.com/Inspections/Details/ImplicitActiveSheetReferenceInspection
为了解决这个问题,使用Worksheet
对象限定Range
调用 – 现在Range
调用是Excel.Worksheet
类的成员:
Dim sheet As Worksheet Set sheet = ThisWorkbook.Worksheets("Sheet1") sheet.Range("H9") = "..."
通过使用工作表对象来限定Range
调用,您可以确保始终写入您要写入的工作表 – 而不是在代码运行时恰好处于活动状态的工作表。