Как правило, VB6 и VBA используют DoEvents, чтобы сообщить процессору продолжить обработку сообщений в очереди сообщений. Он используется, когда в процессоре выполняется интенсивная обработка, поэтому пользовательский интерфейс программы по-прежнему реагирует на все другие события.
Пример. Вы используете алгоритм интенсивного поиска, если вы не добавили DoEvents, программа может зависнуть, пока не завершит поиск. С другой стороны, если вы добавите DoEvents (скажем, в цикл поиска), программа не будет зависать и все равно сможет обрабатывать все события программы, например (Отмена), отменяя поиск.
РЕДАКТИРОВАТЬ: я вижу, что DoEvents является более всеобъемлющим, чем Repaint, поскольку он имеет дело со всеми типами событий, не только обработки мерцания / зависания пользовательского интерфейса.