以前我有一个Excel VBA代码,它为表格中的整个列执行从1张到另一张的索引和匹配公式。代码示例如下:
With Me.Range("table1[Description]")
.Formula = "=IFerror(INDEX(table2,MATCH(B4,table2[Asset No],0),2),"""")"
.Value = .Value
End With
现在我想在工作表中添加一个数组函数,所以我复制了公式并用数组替换旧公式以及其他修改。
Sub refresh()
With Me.Range("table1[Last Service Date]")
.FormulaArray = "=LARGE(IF(table2[[#All],[Asset No]]=[@[Asset No]],table2[[#All],[Entry Date]]),2)"
.Value = .Value
End With
End Sub
但是当我尝试测试代码时,我不断收到错误消息400.我需要在代码中更改数组公式吗?
在代码中使用Me有什么意义?您是否已将该代码放入工作表模块中?我建议您将此代码移至标准模块(如Module1),并使用正确的工作表引用替换Me关键字。否则,我希望您有充分的理由将该代码放入工作表模块中。
此外,您应该将数组公式放在所需列的表的第一个单元格中,并且由于数据被格式化为Excel表格,因此整个列将自动填充公式。如果没有,则可以使用“自动填充”属性在行中填充公式。
尝试一下,看看是否能解决您的问题。答案假定当您手动将其放在工作表上时,通过VBA尝试放置的公式很有效。
With Me.Range("table1[Last Service Date]").Cells(1)
.FormulaArray = "=LARGE(IF(table2[[#All],[Asset No]]=[@[Asset No]],table2[[#All],[Entry Date]]),2)"
.Value = .Value
End With