如何使用VBScript编辑Visio锁定图层上的形状并替代DoEvents功能?
解决方案
方案1:直接调用Visio应用实例的DoEvents方法
VBScript本身没有全局DoEvents,但你创建的Visio应用对象自带该方法,功能和VBA全局DoEvents完全一致,专门用于处理Visio进程内待处理的窗口消息,确保图层解锁操作完全生效后再执行后续代码。
VBScript示例代码:
' 提前定义Visio常量,VBScript不会自动加载Office内置常量 Const visLayerLock = 2 Dim visApp, visPage ' 启动/连接Visio应用 Set visApp = CreateObject("Visio.Application") ' 此处省略打开目标文档、选中目标页面的逻辑,直接复用你现有逻辑即可 Set visPage = visApp.ActivePage ' 解锁图层 visPage.Layers("Locked").CellsC(visLayerLock).FormulaU = "0" ' 调用Visio自带DoEvents处理待执行消息,确保解锁操作生效 visApp.DoEvents ' 修改版本号文本 visPage.Shapes("VersionID").Text = "v1.2.3.4" ' 重新锁定图层 visPage.Layers("Locked").CellsC(visLayerLock).FormulaU = "1"
方案2:强制Visio重绘窗口
如果碰到极端情况方案1不生效,可以调用Visio窗口的强制重绘方法,强制完成所有待处理的界面操作:
' 解锁图层后替换DoEvents的代码 visApp.ActiveWindow.Redraw
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

