Используя Word VBA, Как изменить условие цикла без необходимости повторять весь цикл?
Я хочу вызвать процедуру с аргументами, которые будут использоваться в качестве условия цикла. Следующий код не работает, он дает ОШИБКУ 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
1 ответ
Решение
Word не имеет эквивалента Excel Evaluate
так что это возможно только "долгий путь". Вам нужно выяснить каждую вариацию, которую вы хотите передать для оценки, протестировать ее и затем запустить правильный тип цикла. В любом случае, мне кажется, что вам нужно будет сделать что-то подобное, поскольку использование теста, который у вас есть в вашем примере, не зациклится на "<" (при условии, что вы используете положительные целые числа).
Чтобы избежать повторения кода, который вы хотите выполнить в цикле, поместите его в отдельную функцию.
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