【发布时间】:2019-04-23 02:54:14
【问题描述】:
我正在尝试为 Catia V5 创建宏,它将自动解锁所有视图并更新它们。宏更新所有视图(当它们被解锁时)。 问题是它只解锁了我在运行宏之前当前所在的工作表上的视图,然后它不会更新其他工作表上的其他视图。
因此,解锁视图仅适用于我在运行宏之前最后激活的图纸。 但是,如果我的所有视图都已解锁并且我运行宏,它将更新我的所有视图,但由于某种原因,当我将它们锁定时解锁它们不会像前面所说的那样工作。
Sub CATMain()
Dim oDrawing As DrawingRoot
Dim oViews As DrawingViews
Dim oSheets As DrawingSheets
Set oDrawing = CATIA.ActiveDocument.DrawingRoot
Set oSheets = oDrawing.Sheets
Set oViews = oDrawing.Sheets.ActiveSheet.Views
Dim i, y As Integer
For y = 1 To oSheets.Count
oDrawing.Sheets.Item(y).Activate
For i = 1 To oViews.Count
oViews.Item(i).LockStatus = False
oDrawing.Sheets.ActiveSheet.Update
Next
Next
End Sub
我希望我的宏能够解锁所有视图并在每张图纸上更新它们。
【问题讨论】:
-
i和y是否计入预期数字?也许考虑使用For Each循环而不是基于计数器的迭代。您可以使用右键单击添加监视来“监视”变量,也可以使用debug.print "y: " & y, "i: " & i -
另外:
i在您的情况下被声明为Variant。有关更多信息,请参阅此问题:stackoverflow.com/questions/28238292/declaring-variables-in-vba -
oView设置在第一个For循环之外。你应该把它放在里面。目前您只修改初始活动工作表的视图。设置变量后更改活动工作表不会调整变量。 -
@VincentG 谢谢你解决了我的问题。我看到 oViews 是在循环之前定义的(我的带有视图的活动工作表)。但是在第一个''for y''之后认为循环命令会改变这一点,我猜不会。
-
@L8n 感谢您的帮助和额外的指导,不知道变量的声明。