使用VBA这个词,如何在不复制整个循环的情况下更改循环的条件?

使用VBA这个词,如何在不复制整个循环的情况下更改循环的条件?,vba,ms-word,do-loops,Vba,Ms Word,Do Loops,我想调用一个带有参数的例程作为循环的条件。 下面的代码不起作用,它给出了错误13(不兼容的类型)。我该如何解决这个问题?非常感谢 Sub foo() Call bar("a>10") End Sub Sub bar(myCondition as String) Dim a as Integer Do Debug.Print a a=a+1 Loop Until myCondition End Sub Word与Excel的Evaluate

我想调用一个带有参数的例程作为循环的条件。 下面的代码不起作用,它给出了错误13(不兼容的类型)。我该如何解决这个问题?非常感谢

Sub foo()
   Call bar("a>10")
End Sub

Sub bar(myCondition as String)
   Dim a as Integer
   Do
      Debug.Print a
      a=a+1
   Loop Until myCondition
End Sub

Word与Excel的
Evaluate
没有等价物,因此这只可能是“漫长的道路”。您需要计算出要通过评估的每个变量,测试它是什么,然后运行正确类型的循环。在我看来,无论如何,您都需要这样做,因为使用示例中的测试不会循环使用“”,10) 端接头 子栏(ByVal conditionOperator为字符串,ByVal conditionValue为长) 暗淡如长 选择Case条件运算符 Case Is=“” 做 a=性能循环(a) 循环直到一个>条件值 Case Is=“=” 做 a=性能循环(a) 循环直到a=conditionValue 大小写为=“>=” 做 a=性能循环(a) 循环直到>=条件值
Case Is=“Thank you@Cindy Meister!非常聪明的代码!但实际上我想做的是在文本中找到具有给定字体颜色的段落。我担心对于每种颜色,我都必须编写一个完整的子程序,所以我要重复很多:(.我想做一些类似FindNext段落(“绿色”)、FindNext段落(“红色”)的事情),FindNextParagraphGreen(),FindNextParagraphRed(),FindNextParagraphBlue(),但恐怕我必须做FindNextParagraphGreen(),FindNextParagraphRed(),FindNextParagraphBlue(),等等。有什么想法吗?@sergiotrajano这是一个完全不同的问题。Cindy回答了你问的问题。这个问题应该标记为正确,你需要问一个实际涉及你想要的问题的问题。@sergiotrajano太糟糕了,你没有问你想要回答的问题……如果你的意思是你想要的是Word的高级查找功能。您可以使用“更多”按钮下的工具来搜索格式。请稍微使用它,然后在宏中记录这些步骤。我相信您会看到您可以使用可以传递给函数的值。如果您需要帮助,请发布新问题:-)我为我的错误@ScottCraner感到非常抱歉。我试图制定一个关于do循环直到条件的一般性问题,这是a在我的代码中使用的:循环直到选择。Font.ColorIndex=wdRed。我很抱歉,伙计们,我的坏:(Well@sergiotrajano仔细看看你刚刚发布的代码:wdRed不是一个字符串,它是一个常量值,具有长数据类型等效项。你可以随时传递它。。。
Sub foo()
   Call bar(">", 10)
End Sub

Sub bar(ByVal conditionOperator As String, ByVal conditionValue As Long)
   Dim a As Long
   Select Case conditionOperator
    Case Is = "<"
        Do
         a = PerformLoop(a)
        Loop While a < conditionValue
    Case Is = ">"
        Do
         a = PerformLoop(a)
        Loop Until a > conditionValue
    Case Is = "="
        Do
         a = PerformLoop(a)
        Loop Until a = conditionValue
    Case Is = ">="
        Do
         a = PerformLoop(a)
        Loop Until a >= conditionValue
    Case Is = "<="
        Do
         a = PerformLoop(a)
        Loop While a < conditionValue
   End Select
End Sub

Function PerformLoop(a As Long) As Long
      Debug.Print a
      a = a + 1
      PerformLoop = a
End Function