有没有办法执行单元格中包含的VBA代码?
我正在Excel中构建一个宏,以针对一组数据运行规则,并输出每一行是否通过规则。我希望能够在不改变宏的情况下添加、删除或更改规则。因此,我有一个数据工作表和一个规则工作表,宏生成输出工作表,然后填充它 设置规则,以便在不同的行上枚举每个不同的规则。为此,我需要能够在“规则”中输入与规则相关的实际VBA代码,然后我需要让宏查看“规则”列并在单元格中执行代码 我的设置的简化示例- 数据有:ID、Dividend1、Dividend2、除数。数据上有n行。 数据行的示例可能是ID=123、Dividend1=5、Dividend2=7、divisior=35。 规则有:名称、公式、阈值。为了简单起见,只有一个。 让我们将其设置为Name=Example,Formula=[见下文],Threshold=0.15 Threshold用于宏中的条件格式设置,在本例中未使用。 我将在公式中使用伪代码,这样就不需要解释到目前为止宏中一些不相关的细节。公式应包含一行执行以下操作的VBA代码-有没有办法执行单元格中包含的VBA代码?,vba,excel,Vba,Excel,我正在Excel中构建一个宏,以针对一组数据运行规则,并输出每一行是否通过规则。我希望能够在不改变宏的情况下添加、删除或更改规则。因此,我有一个数据工作表和一个规则工作表,宏生成输出工作表,然后填充它 设置规则,以便在不同的行上枚举每个不同的规则。为此,我需要能够在“规则”中输入与规则相关的实际VBA代码,然后我需要让宏查看“规则”列并在单元格中执行代码 我的设置的简化示例- 数据有:ID、Dividend1、Dividend2、除数。数据上有n行。 数据行的示例可能是ID=123、Divide
If CurrentDATARow.Dividend1 = Empty Then
CurrentDATARow.Dividend2 / CurrentDATARow.Divisor
Else
CurrentDATARow.Dividend1 / CurrentDATARow.Divisor
End If
因此,所有这些解释只是为了给这个问题提供上下文:我可以在宏的VBA中做什么,使它读取RULES.Formula的内容,并使其与宏的其余部分内联执行代码?您可以将测试/规则作为Excel工作表公式存储在指定范围内。然后你就从牢房里给他们打电话 看
如果您给我们一些示例数据以及计算或规则的类型,我可以给您几个示例。您可以将测试/规则存储为命名范围内的Excel工作表公式。然后你就从牢房里给他们打电话 看 如果你给我们一些示例数据和计算或规则的类型,我可以给你几个示例。如果你说
IF({dividend1}="",{dividend2}/{divisor},{dividend1}/{divisor})
存储在规则单元格注释中的不包括=,可以使用“替换”将占位符替换为要检查的行中每个单元格的相关单元格地址
然后使用类似
Dim val
val=Sheet1.Evaluate(yourformulastring) 'evaluate vs. specific worksheet
If Not IsError(val) Then
'check against thresholds etc
End If
如果计算结果出现错误,您可以使用IsErrorval进行测试,如图所示,否则它将返回公式的结果,您可以使用阈值单元格进行测试。如果在阈值单元格上设置背景色,则可以根据超出阈值的行对每一行进行着色
注意:如果没有工作表限定符,Evaluate将根据ActiveSheet计算公式,因此,如果不使用限定符,请确保在运行时正确的工作表处于活动状态。如果您有话要说
IF({dividend1}="",{dividend2}/{divisor},{dividend1}/{divisor})
存储在规则单元格注释中的不包括=,可以使用“替换”将占位符替换为要检查的行中每个单元格的相关单元格地址
然后使用类似
Dim val
val=Sheet1.Evaluate(yourformulastring) 'evaluate vs. specific worksheet
If Not IsError(val) Then
'check against thresholds etc
End If
如果计算结果出现错误,您可以使用IsErrorval进行测试,如图所示,否则它将返回公式的结果,您可以使用阈值单元格进行测试。如果在阈值单元格上设置背景色,则可以根据超出阈值的行对每一行进行着色
注意:如果没有工作表限定符,Evaluate将根据ActiveSheet计算公式,因此,如果不使用限定符,请确保在运行时正确的工作表处于活动状态。看起来您这样做是错误的。。。为什么不在VBA中将每个规则建立为一个布尔函数,然后在您的行范围内迭代,并针对所有函数测试每个规则呢。然后,您可以轻松地修改一个或多个函数,就像操作工作表单元格中的文本一样简单。我可以看到您试图执行的操作,但我无法理解您的伪代码。它应该做什么?我会将测试存储为Excel工作表公式,并为要插入的特定值设置占位符。然后用单元格地址替换每行的占位符:使用Evaluate运行公式并返回结果。@JonnyP我也喜欢我的方法:但如果它是针对非VBA用户的应用程序,那么Tim的方法会更好。只要你能相信用户不会弄乱工作表公式。根据我的经验,这可能是不合理的。给人们一种方法来破坏一个输入,他们就会破坏这个输入:看起来你走错了方向。。。为什么不在VBA中将每个规则建立为一个布尔函数,然后在您的行范围内迭代,并针对所有函数测试每个规则呢。然后,您可以轻松地修改一个或多个函数,就像操作工作表单元格中的文本一样简单。我可以看到您试图执行的操作,但我无法理解您的伪代码。它应该做什么?我会将测试存储为Excel工作表公式,并为要插入的特定值设置占位符
进来。然后用单元格地址替换每行的占位符:使用Evaluate运行公式并返回结果。@JonnyP我也喜欢我的方法:但如果它是针对非VBA用户的应用程序,那么Tim的方法会更好。只要你能相信用户不会弄乱工作表公式。根据我的经验,这可能是不合理的。给人们一种方法来破坏输入,他们就会破坏输入: