繁体   English   中英

Excel VBA变量逻辑运算符

[英]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

或者使用TRUEFALSE代替10 我的语言不是英语。 但是我认为这也可行。

x = Evaluate("IF(" & strEvaluate & "," & True & ", " & False & ")")

if x = TRUE then
'Run your code
end if

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM