【发布时间】:2013-05-23 15:00:13
【问题描述】:
我正在 Excel 中构建一个宏来针对一组数据运行规则并输出每行是否通过规则。我希望能够在不更改宏的情况下添加、删除或更改规则。因此,我有一个 DATA 工作表和一个 RULES 工作表,宏生成 OUTPUT 工作表,然后填充它。
RULES 设置为在不同的行上枚举每个不同的规则。为此,我需要能够在 RULES 中输入与规则相关的实际 VBA 代码,然后我需要让宏查看 RULES 上的该列并执行单元格中的代码。
我的设置的简化示例-
- DATA 有:ID、Dividend1、Dividend2、Divisor。 DATA 上有 n 行。
- DATA 上的一行示例可能是 ID="123"、Dividend1=5、Dividend2=7、Divisor=35。
- 规则有:名称、公式、阈值。为简单起见,只有 .
- 让我们将其设置为 Name="Example", Formula=[见下文], Threshold="0.15"(阈值用于宏中的条件格式,在本例中未使用。)
我将使用公式的伪代码,只是为了消除到目前为止解释我的宏的一些不相关细节的需要。 RULES.Formula 应包含一行 VBA 代码,用于执行-
If CurrentDATARow.Dividend1 = Empty Then
CurrentDATARow.Dividend2 / CurrentDATARow.Divisor
Else
CurrentDATARow.Dividend1 / CurrentDATARow.Divisor
End If
所以,所有这些解释只是为了给这个问题提供上下文:我可以在宏的 VBA 中做什么,以使其读取 RULES.Formula 的内容并使其执行与其余代码内联的代码宏?
【问题讨论】:
-
似乎您的做法是错误的...为什么不在 VBA 中将每个
Rule建立为布尔值Function,然后遍历您的行范围并针对所有行进行测试什么功能。然后,您可以轻松地修改一个或多个函数——就像在工作表单元格中操作文本一样容易。 -
我可以看到你想要做什么,但我无法理解你的伪代码。它应该做什么?
-
我会将测试存储为 Excel 工作表公式,并带有要插入的特定值的占位符。然后用单元格地址替换每行的占位符:使用 Evaluate 运行公式并返回结果。
-
@JonnyP 我也喜欢我的方法 :) 但如果它是针对非 VBA 用户的应用程序,那么 Tim 的方法会更好。
-
只要您可以依靠用户不搞乱工作表公式。根据我的经验,这可能是不合理的。给人们搞砸输入的方法,他们就会搞砸输入:)