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

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

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

我的设置的简单例子 –

  • 数据有:ID,Dividend1,Dividend2,Divisor。 DATA上有n行。
  • 数据行上的一个例子可能是ID =“123”,Dividend1 = 5,Dividend2 = 7,Divisor = 35。
  • 规则有:名称,公式,阈值。 只是为了简单起见。
  • 让我们设置为名称=“示例”,公式= [见下文],阈值=“0.15”(阈值用于macros中的条件格式,在这个例子中它是未使用的。

我将使用伪代码来消除需要解释我的macros的一些不相关的细节到目前为止。 RULES.Formula应该包含一行VBA代码,

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

所以,所有这些解释只是为了给这个问题提供上下文: 我可以在macros的VBA中做些什么来使其读取RULES.Formula的内容并使其与macros的其余部分内联执行?

如果你有(说)

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

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

然后使用类似的东西

 Dim val val=Sheet1.Evaluate(yourformulastring) 'evaluate vs. specific worksheet If Not IsError(val) Then 'check against thresholds etc End If 

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

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

您可以将您的testing/规则作为Excel工作表公式存储在命名范围中。 那么你只需从单元中调用它们。

见Ozgrid:命名公式

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