Используя 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
Другие вопросы по тегам