【问题标题】:Output/Print variable, in code, in if statement输出/打印变量,在代码中,在 if 语句中
【发布时间】:2013-08-09 04:02:56
【问题描述】:

我正在努力实现以下目标: 用户会看到一个 Excel 电子表格,其中包含他们可以更改的假设列表。

Title       |     Value        |
Input01     |       10         |  =
Input02     |       2          |  >=
Input03     |       800        |  >=
Input04     |       4          |  >=
Input05     |       2          |  <=

如果满足假设,则有一个If .. Then 语句会提取数据。但是,如果假设是空白的,则不应将其包含在 If .. Then 语句中。

If x = Input01Value And y >= Input02Value _
And z >= Input03Value And a >= Input04Value _
And b <= Input05Value Then

用户省略 Input03

If x = Input01Value And y >= Input02Value _
And a >= Input04Value And b <= Input05Value Then

现在我可以检查每个值是否存在,然后用另一个带有适当变量的 If 语句跟随它。但这似乎有点多余。

我想知道是否可以进行以下操作:

Input 01 = ""
If Input01Value != "" Then Input01 = "x = " & Input01Value
'Then use join or something similar to join all of them ..

然后在If .. Then 语句中直接使用这个Input01。这样,当变量为空时,And .. 不包括在内,If 语句不会失败。
例如。 (我知道这行不通,只是说明场景)

VBA: If Input01 Then
Result while compiling: If x = Input01Value Then

请注意,我知道我可以执行以下操作:
If Boolean And Variable2 &gt; 4 Then 然后让BooleanVariable2 在单元格中填充一个值,但是这样做的问题是,如果用户,例如,决定省略Variable2(这是合理的)它将失败。例如。 If (Boolean = True) And &gt; 4 Then.

希望我的问题很清楚,感谢您的帮助。

【问题讨论】:

  • 没有必要在这样的代码中嵌入逻辑:你应该编写If测试直接使用CoverageRatioInput的值。
  • 但是如果CoverageRatioInput没有值的话它会失败,对吧?
  • 那么你首先测试它是否有一个值......编写代码执行测试所需的所有相同逻辑都可以直接在测试中表达。
  • 但是如果我有多个变量,就会导致乱七八糟的意大利面条代码。如果我有 5 个变量,它将导致 120 个不同的语句.. 这似乎有点多余。
  • 处理一堆不同的结果并不一定需要等量的单独测试。您将“通用测试代码编写”代码替换为“测试”代码。您的示例代码测试一个数字是否是介于 1 和用户提供的数字之间的整数:您可以编写一个直接执行此操作的测试。

标签: vba if-statement


【解决方案1】:

如果使用一个根据字符串运算符和两个值对选择案例进行操作的函数呢?

Function conditionalString(condition As String, x As Variant, y As Variant) As Boolean
Select Case condition
    Case "="
        If (x = y) Then
            conditionalString = True
        Else
            conditionalString = False
        End If
        Exit Function
    Case ">="
        conditionalString = (x >= y)
        Exit Function
    Case "<="
        conditionalString = (x <= y)
        Exit Function
    Case ">"
        conditionalString = (x > y)
        Exit Function
    Case "<"
        conditionalString = (x < y)
        Exit Function
    Case Else
        conditionalString = False
End Select
End Function

然后你可以只使用另一个函数,在调用所有假设之前说“检查值是否不为空”。

【讨论】:

    【解决方案2】:

    扩展我的评论,您可以使用类似这样的方法来测试每一行输入。

    Function TestIt(testValue,inputOperator,inputValue) As Boolean
        If Len(inputValue)=0 Then
            TestIt=True 'ignore this test: no value supplied
        Else
            TestIt=Application.Evaluate(testValue & inputOperator & inputValue)
        End If
    End function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-17
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 2014-10-04
      • 1970-01-01
      相关资源
      最近更新 更多