有没有办法执行单元格中包含的VBA代码?

时间:2013-05-23 15:00:13

标签: excel vba excel-vba

我正在Excel中构建一个宏,以针对一组数据运行规则,并输出每行是否通过规则。我希望能够在不改变宏的情况下添加,删除或更改规则。因此,我有一个DATA工作表和一个RULES工作表,宏生成OUTPUT工作表,然后填充它。

设置RULES,以便在不同的行上枚举每个不同的规则。为了实现这一点,我需要能够在RULES中输入与规则相关的实际VBA代码,然后我需要让宏查看RULES上的那一列并执行单元格中的代码。

我的设置的简化示例 -

  • DATA有:ID,Dividend1,Dividend2,Divisor。 DATA上有n行。
  • DATA上一行的示例可能是ID =“123”,Dividend1 = 5,Dividend2 = 7,Divisor = 35。
  • 规则有:姓名,公式,门槛。为简单起见,只有。
  • 设置为名称=“示例”,公式= [见下文],阈值=“0.15”(阈值用于宏中的条件格式,在此示例中未使用。)

我将使用伪代码来表示公式,以消除迄今为止解释宏的一些无关细节的必要性。 RULES.Formula应该包含一行VBA代码 -

If CurrentDATARow.Dividend1 = Empty Then
    CurrentDATARow.Dividend2 / CurrentDATARow.Divisor
Else
    CurrentDATARow.Dividend1 / CurrentDATARow.Divisor
End If

所以,所有这些解释只是为了给出这个问题的上下文:我可以在宏的VBA中做些什么来使它读取RULES.Formula的内容并使其与其余内容一起执行该代码宏?

2 个答案:

答案 0 :(得分:3)

如果你有(说)

IF({dividend1}="",{dividend2}/{divisor},{dividend1}/{divisor}) 

存储在“规则”单元格中(注意不包括“=”),您可以使用Replace()将占位符替换为您正在检查的行中每个单元格的相关单元格地址。

然后使用类似

的内容
Dim val

val=Sheet1.Evaluate(yourformulastring) 'evaluate vs. specific worksheet

If Not IsError(val) Then
    'check against thresholds etc
End If

如果评估导致错误,您可以使用IsError(val)进行测试,否则它将返回公式的结果,您可以针对“阈值”值单元格进行测试。如果在阈值单元格上设置背景颜色,则可以根据超出的阈值为每一行着色。

注意没有工作表限定符,Evaluate将根据ActiveSheet计算公式,因此如果不使用限定符,请确保在运行此表时处于活动状态。

答案 1 :(得分:1)

您可以将测试/规则存储为命名范围内的Excel工作表公式。然后你只需从细胞中调用它们。

请参阅Ozgrid: Named Formulas

如果你给我们一些示例数据和计算或规则的类型,我可以举几个例子。