tldr; Вы можетCall
это, но только явно из модуля VBA.
В документации, связанной с помощью @ Gary'sStudent (see the application agnostic version here) указывает, DoEvents
на самом деле Function
не Sub
, и он всегда будет возвращать 0 в VBA. В unhosted Visual Basic (т. Е. VB6) он возвращает общее количество открытых окон. Мое совершенно необоснованное предположение о том, что , почему возвращает 0, заключается в том, что в VBA окно верхнего уровня процесса, в котором выполняется код, не принадлежит исполняемому вами коду.
Сама функция находится в VBA.Interaction
модуле, как вы можете видеть в обозревателе объектов:
Тем не менее, следует отметить, что можно использовать функцию DoEvents
предшествуют в Call
ключевое слово - но вы должны явно указать VBA
сборки:
Sub Example()
'This is perfectly fine.
Call VBA.DoEvents
End Sub
Опять же, это просто предположение, но я подозреваю, что причина связана с внутренней реализацией. Обычно это вызывает функцию SwitchToThread (которую импортирует vbe7.dll). Но характер возвращаемого значения указывает на перечисление окон, которые получают , до, поэтому для запуска, вероятно, нужен только дескриптор VBA
. Существует нет ничего в TypeLib, что наводит на мысль, что это отличается от любых других функций в модуле Interaction (хотя может быть флаг, который я пропустил где-то):
[entry(598), helpcontext(0x000f7900)]
short _stdcall DoEvents();
природа из ошибка компиляции «Ожидаемый: идентификатор» означает, что есть что-то внутреннее, которое «скрывает» DoEvents
от общедоступных функций VBA.
Конечная нота: Синтаксис Call Foo
совершенно излишни - все это делает явно отбросить возвращаемое значение функции.Не , присваивая, возвращаемое значение делает то же самое.
Я не думаю, что вы можете позвонить любому члену класса взаимодействия VBA (Environ, MsgBox и т. Д.) –
@JiminyCricket 'Call MsgBox (« Test », vbOKOnly)' определенно работает. 'DoEvents' является первым (функция?) Я наткнулся на это, не позволил мне« позвонить » – Mafii
Ах, я пробовал использовать его в качестве подзона MsgBox« Тест »не работает. Лучше всего не использовать Call и просто использовать DoEvents. Я использовал это как общую практику для всех подсистем и функций, поскольку он сокращает код/визуальный беспорядок. –