VBA:在Range.Formula

时间:2016-06-21 20:36:55

标签: excel vba excel-vba

此时所有人都知道您可以执行以下操作将公式应用于范围,右侧的单元格引用将动态更新:

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=K3etc最终等于单元格K2中的值。例如,=14并将其应用于整个范围。它甚至不会返回K3K4etc中的值。这是用于此的公式:

"=" & xl.Range(xl.Cells(2, xl.Match("PCode", cols, 0)), xl.Cells(2, xl.Match("PCode", cols, 0)))

我做错了什么?这样做的原因是因为列我需要引用报告之间的更改,但标题名称保持不变。它可以是一个报告中的列M,但是另一个报告中的列Z.到目前为止,我一直在使用For Loops,但它们很慢并且想要避免它们。

1 个答案:

答案 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) & ")"