VBA在range.formula中交叉引用

时间:2016-11-19 23:49:15

标签: excel-vba range formula cross-reference vba

有人可以帮我实现吗?

Range("B3").Formula = "=SUMIF(Active.Select!$A:$A,Results.select!$A3,Active.select!B:B)"

我已将Active和Results定义为WorkSheet,我的目标是对它们进行动态引用,以便宏cna可以在工作簿的任何工作表上运行,而不会有任何静态参考Sheet1!

如果我尝试运行我写的内容,他要求我通过一个开放的窗口提供Active和Results

我知道这可能是一个愚蠢的问题,但我刚刚开始

2 个答案:

答案 0 :(得分:1)

如果删除工作表名称,则公式将引用它所在的工作表。

Range("D2").Formula = "=SUMIF($A:$A,$E$1,$B:$B)"

enter image description here

工作表有一个Evaluate方法,它将返回公式的值

enter image description here

注意:我没有使用Range("B3").Formula = "=SUMIF($A:$A,$A3,B:B)",因为它是循环引用。

答案 1 :(得分:0)

假设ActiveResults都是Worksheet个对象,那么如果您希望创建公式以进入ActiveSheet的单元格B3,请尝试以下操作:< / p>

Range("B3").Formula =  "=SUMIF('" & Active.Name & "'!$A:$A,'" & Results.Name & "'!$A3,'" & Active.Name & "'!B:B)"

如果您想获取该值并将其用于VBA中的某些内容,请尝试以下操作:

Dim sumIfResult As Double
sumIfResult = Application.WorksheetFunction.SumIf(Active.Range("$A:$A"),Results.Range("$A3"),Active.Range("B:B"))