此时所有人都知道您可以执行以下操作将公式应用于范围,右侧的单元格引用将动态更新:
Range("A1:A10").Formula = "=J2+M2"
这不是我要问的。我试图将数组索引传递到Range.Formula
的右侧,我没有得到我想要的结果。对于初学者来说,这是我的代码,左侧工作正常(请注意xl.
是由于这是从MS Access启动的):
' Get the new amount of columns since new ones have been added
lastColumn = xl.Cells(1, xl.Columns.Count).End(xlToLeft).Column
' Create and array of the header names to quickly locate column number
cols = xl.Range(xl.Cells(1, 1), xl.Cells(1, lastColumn)).Value
' Apply the formulas
xl.Range(xl.Cells(2, xl.Match("FCode", cols, 0)), xl.Cells(lastRow, xl.Match("FCode", cols, 0))).Formula =
这很适用于正确的范围。如果我在右侧放置"ASD"
,"=J2+M2"
,则会更新正确的范围。当我需要在右侧使用xl.Match(...)
作为公式的一部分时,问题就出现了。
例如:
"=ISBLANK(" & xl.Range(xl.Cells(2, xl.Match("NCode", cols, 0)), xl.Cells(2, xl.Match("NCode", cols, 0))) & ")"
返回1004: Application-defined or object-defined error
。这应该会在应用范围内返回=ISBLANK(K2)
,=ISBLANK(K3)
,etc.
。
只是一个简单的引用应该等于=K2
,=K3
,etc
最终等于单元格K2
中的值。例如,=14
并将其应用于整个范围。它甚至不会返回K3
,K4
,etc
中的值。这是用于此的公式:
"=" & xl.Range(xl.Cells(2, xl.Match("PCode", cols, 0)), xl.Cells(2, xl.Match("PCode", cols, 0)))
我做错了什么?这样做的原因是因为列我需要引用报告之间的更改,但标题名称保持不变。它可以是一个报告中的列M,但是另一个报告中的列Z.到目前为止,我一直在使用For Loops
,但它们很慢并且想要避免它们。
答案 0 :(得分:6)
"=ISBLANK(" & xl.Range(xl.Cells(2, xl.Match("NCode", cols, 0)), _
xl.Cells(2, xl.Match("NCode", cols, 0))) & ")"
应该是
"=ISBLANK(" & xl.Cells(2, xl.Match("NCode", cols, 0)).Address(false, false) & ")"