Я не знаю VB скрипт, но я бы решил эту проблему следующим образом.
Ваша функция IP by Test работала бы в отдельном потоке, поток, в котором работает графический интерфейс, должен иметь возможность связываться с другим вашим потоком и устанавливать переменную.
Для удобства чтения я бы ввел новую переменную, скажем, AbortedByUser, эта переменная может быть установлена вашим другим потоком (обработчиком событий или чем-то в этом роде, чтобы не делать ее публичной ...)
Тогда ваш код будет выглядеть примерно так:
Do Until ValidIP=OK AND !AbortedByUser
IPrange=InputBox("Enter IP address range",,"172.17.202.1-10,192.9.200.1-100")
Test IPrange, strPattern
Loop
Обратите внимание, что AbortedByUser должен быть установлен в false при запуске вашей функции.
Поскольку я не знаю VB-скрипт, я не знаю, как написать это, а НЕ как следует ..; -)