我需要计划一段VBA代码,以便在Mac版Microsoft PowerPoint(版本16)中每500毫秒运行一次。
在Word和Excel中,我可以使用Application.OnTime
方法来计划代码,但是PowerPoint中不存在该方法,并且粒度为1秒。
在Windows上,我可以使用外部调用SetTimer
库中的user32
函数,例如在this question中。但是,我似乎在macOS上找不到等效的库方法。
我最好的选择似乎是编写一个实用程序库,其接口类似于在Windows上使用NSTimer,Grand Central Dispatch或Pthread实现的SetTimer
,然后安装它从VBA调用它,然后间隔调用它。
我的Mac开发经验有限,并且没有从VBA编写和调用外部库的经验,但是我设法实现了对C / Objective-C库的往返调用/回调(基本上{{1 }}称为void CallFunction(void (*function_pointer)(void)) { function_pointer(); }
),但是当我尝试通过Grand Central Dispatch或Pthread推迟该回调时,一旦发生CallFunction(AddressOf Callback)
异常和日志的回调,PowerPoint就会崩溃容易破译。我可以想象问题是回调是从另一个线程发生的,或者回调函数不在调用EXC_BAD_ACCESS
时的地址处。
是否有现成的解决方案来安排PowerPoint for Mac中的VBA代码? 另外,是否有任何资源可以帮助我调试回调崩溃?