使用VBA这个词,如何在不复制整个循环的情况下更改循环的条件?
我想调用一个带有参数的例程作为循环的条件。 下面的代码不起作用,它给出了错误13(不兼容的类型)。我该如何解决这个问题?非常感谢使用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
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