【发布时间】:2017-12-27 07:47:23
【问题描述】:
以前我有一个 Excel VBA 代码,它为表中的整个列执行从一张到另一张的索引和匹配公式。代码示例如下:
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。 我需要在我的代码中更改数组公式的任何内容吗?
【问题讨论】:
-
当然在我指向的任何单元格上因为你使用
Selection。 -
oops.. 抱歉,不小心使用了我的旧测试代码。我会在适当的地方编辑。
-
您改写了 [previous question][1] 很好(现在我了解您的后续问题),但需要更多信息。错误消息的其余部分是什么,它发生在哪一行?您确定
Me.Range("table1[Last Service Date]")是有效范围吗?如果您尝试在其中放置一个“常规”公式,例如.Formula="1+1",会发生什么情况?还有,.Value = .Value的目的是什么? -
很高兴得到澄清:p。无论如何
Me.Range("table1[Last Service Date]")至少对公式有效。因为当我用 1+1 公式替换数组时,整列自动按预期创建 2。至于.value = .value,它是一种仅将公式更改为值的方法。我不需要将公式保留在表格中。 -
错误信息也只是说
400。就是这样。导致它的行位于.FormulaArray。