Excel vba可变逻辑运算符

我有一个电子表格,用户可以定义一些规则,但是我正在努力使日志工作。 我想要基于用户想要的差异结果,但理想情况下,我想远离但只有多个select案例或行。

我有什么是这个(简化 – 它是一个循环,所以值会改变每一行 – 我只是使用一个例子):

操作员可以改变,可以是“>”,“=>”等

Field1Value = "Football" Operator1 = "=" Rule1 = "Football" If Evaluate(Field1Value & Operator1 & Rule1 ) Then 'Run My Code End If 

所以在上面的例子中,逻辑将是真实的,我的代码将运行,但我得到一个types不匹配的错误。

有没有人有任何想法?

谢谢Chris

******** ******** UPDATE

以下是完整的代码:

 Workbooks(MasterWB).Activate Sheets("Rules").Select NoRules = Sheets("Rules").Range("J6").End(xlDown).Row For a = 7 To NoRules Field1 = Workbooks(DataWB).Sheets(DataWS).Rows(1).Find(Workbooks(MasterWB).Sheets("Rules").Cells(a, 10), , xlValues, xlWhole).Column Operator1 = Sheets("Rules").Cells(a, 11) Rule1 = Sheets("Rules").Cells(a, 12) Operator = Sheets("Rules").Range("J5").Cells(a, 13) Field2 = Workbooks(DataWB).Sheets(DataWS).Rows(1).Find(Workbooks(MasterWB).Sheets("Rules").Cells(a, 14), , xlValues, xlWhole).Column Operator2 = Sheets("Rules").Cells(a, 15) Rule2 = Sheets("Rules").Cells(a, 16) HighlightColumn = Workbooks(DataWB).Sheets(DataWS).Rows(1).Find(Workbooks(MasterWB).Sheets("Rules").Cells(a, 17), , xlValues, xlWhole).Column HighlightColour = Workbooks(MasterWB).Sheets("Rules").Cells(a, 17).Interior.ColorIndex Workbooks(DataWB).Activate With Workbooks(DataWB).Sheets(DataWS) .Select Lastrow = .UsedRange.Rows.Count For b = 2 To Lastrow Field1Value = .Cells(b, Field1).Value If Evaluate(Field1Value & Operator1 & Rule1) Then .Cells(b, HighlightColumn).Interior.ColorIndex = HighlightColour End If Next b End With Next a 

尝试如下所示:

 Field1Value = "Football" Operator1 = "=" Rule1 = "Football" Dim x As Variant strEvaluate = Chr(34) & Field1Value & Chr(34) & Operator1 & Chr(34) & Rule1 & Chr(34) x = Evaluate("IF(" & strEvaluate & ",1,0)") if x = 1 then 'Run your code end if 

或者,而不是10使用TRUEFALSE 。 我的语言不是英语。 但我认为这也有效。

 x = Evaluate("IF(" & strEvaluate & "," & True & ", " & False & ")") if x = TRUE then 'Run your code end if 

假设你期待“足球”=“足球”产生True ,那么试试这个:

 If Evaluate("""" & Field1Value & """ " & Operator1 & " """ & Rule1 & """") Then 

请注意,我把我的string用引号引起来 – 你需要把它们传递给Evaluate()

其实,根据我对MS Docs的看法,我不认为这会起作用。

评估( 名称

名称 :公式或对象的名称,使用Microsoft Excel的命名约定。 名称的长度必须小于或等于255个字符。

“足球”的定义是什么? 这是一个简单的文本string? 我的阅读表明, Evaluate()将执行一个内置函数或UDF,但不是一个简单的比较。

坚持下去我不是故意要从FreeMan窃取信用,而是为我工作:

 Sub test() Dim Field1Value As String Dim Operator1 As String Dim Rule1 As String Dim test As Range Dim Passed As Boolean Field1Value = "Football" Operator1 = "=" Rule1 = "Football" Passed = Evaluate("=" & """" & Field1Value & """" & Operator1 & """" & Rule1 & """") 'Different way of achievieng same thing ignore this if you want to Set test = Range("A1") test.Formula = "=" & """" & Field1Value & """" & Operator1 & """" & Rule1 & """" Passed = test.Value MsgBox Passed End Sub 

我试了几个值和运算符,它工作正常。

所以我只会通过join"=" &作为评估的第一部分来纠正FreeMan。

所以为了使这个更简洁,我写这个:

 Evaluate("=" & """" & Field1Value & """" & Operator1 & """" & Rule1 & """")