使用VBS [Visio]编辑锁定层的形状



我将版本号作为一个形状放在我的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

相关内容

  • 没有找到相关文章

最新更新