[英]Excel vba variable logic operator
我有一个电子表格,用户可以在其中定义一些规则,但是我在努力使日志正常工作。 我希望根据用户的需求获得不同的结果,但理想情况下,我希望避免在行或行中必须选择多个情况。
我所拥有的(简化-处于循环中,因此每一行的值都会改变-我只是在使用示例):
运算符可以有所不同,可以是“>”,“ =>”等。
Field1Value = "Football"
Operator1 = "="
Rule1 = "Football"
If Evaluate(Field1Value & Operator1 & Rule1 ) Then
'Run My Code
End If
因此,在上面的示例中,逻辑将是正确的,并且我的代码将运行,但是我遇到类型不匹配错误。
有任何想法吗?
谢谢克里斯
******** ******** 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
假设您期望“ Football” =“ Football”产生
True
,然后尝试一下:
If Evaluate("""" & Field1Value & """ " & Operator1 & " """ & Rule1 & """") Then
注意,我将字符串用引号引起来-您需要将其传递给
Evaluate()
实际上,根据我对MS Docs的阅读,我认为这行不通。
评估( 姓名 )
名称 :使用Microsoft Excel的命名约定的公式或对象名称。 名称的长度必须小于或等于255个字符。
“足球”的解释是什么? 它是一个简单的文本字符串吗? 我的阅读表明, Evaluate()
将执行内置函数或UDF,但不是简单的比较。
稍等,我并不是要从FreeMan窃取Credit,但是以下对我有用:
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
我尝试了几个值和运算符,它工作正常。
因此,我只能通过在评估的第一部分添加"=" &
更正FreeMan。
因此,为了更加简洁,我要写这个:
Evaluate("=" & """" & Field1Value & """" & Operator1 & """" & Rule1 & """")
尝试如下所示:
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
或者使用TRUE
和FALSE
代替1
和0
。 我的语言不是英语。 但是我认为这也可行。
x = Evaluate("IF(" & strEvaluate & "," & True & ", " & False & ")")
if x = TRUE then
'Run your code
end if
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.