我尝试在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

Excel._Global.Range隐式引用ActiveSheet

 Range("H9").Formula = "..." 

对活动工作表的隐式引用会使代码变得脆弱而难以debugging。 考虑在预期的时候使这些引用明确,并且更喜欢使用对象引用。

http://rubberduckvba.com/Inspections/Details/ImplicitActiveSheetReferenceInspection

为了解决这个问题,使用Worksheet对象限定Range调用 – 现在Range调用是Excel.Worksheet类的成员:

Excel.Worksheet.Range是合格的

 Dim sheet As Worksheet Set sheet = ThisWorkbook.Worksheets("Sheet1") sheet.Range("H9") = "..." 

通过使用工作表对象来限定Range调用,您可以确保始终写入您要写入的工作表 – 而不是在代码运行时恰好处于活动状态的工作表。