我将版本号作为一个形状放在我的Visio页面的锁定层上,需要以编程方式更新一堆版本号。对于Locked
层和形状VersionID
,解决方案似乎很简单:
Sub editShape()
ActivePage.Layers("Locked").CellsC(visLayerLock).FormulaU = "0"
ActivePage.Shapes("VersionID").Text = "v1.2.3.4"
ActivePage.Layers("Locked").CellsC(visLayerLock).FormulaU = "1"
End Sub
以上内容不起作用。单独的行可以工作,但是始终运行子例程会发出关于形状被保护的通知,并且文本保持不变。看起来它试图并行执行这些行,所以它试图在图层实际解锁之前改变形状文本。
我尝试了一些东西,比如
- 为它们分配变量并在每个步骤之间设置/取消它们
- 将每一行放在子程序中并按顺序调用
- 在两者之间添加
for
循环以创建文字时间延迟
这些方法都不起作用。在Visio中起作用的是在解锁图层和编辑形状之间添加DoEvents
行。
这是我的问题:我需要这个通过VBScript运行,和DoEvents
不存在那里。
或者:我如何让程序停止并在继续之前执行到该点之前的所有代码?像消息框这样的东西可能会起作用,但这极大地阻碍了它的自动特性。
我找到了一个我认为是解决方案。您可以使用developer选项卡下的形状保护选项来保护特定的形状,而不是使用整个图层。然后你可以通过VBA启用或禁用它,就像你打算对图层做的那样。
要启用保护,在我的例子中是文本框中的文本:
- Application.ActiveWindow.Page.Shapes.ItemFromID(4)。CellsSRC(visSectionObject, visRowLock, visLockTextEdit)。公式= "1">
关闭保护:
- Application.ActiveWindow.Page.Shapes.ItemFromID(4)。CellsSRC(visSectionObject, visRowLock, visLockTextEdit)。公式= "1">
关于Developer/Shape Protection的信息:
- https://support.microsoft.com/en-us/office/prevent-or-allow-changes-to-shapes-e65decf4-0eed-4fd6-a7d9-b286abcbc7eb