此代码允许我快速关闭,并在必要时使用键盘快捷键保存文档。
Sub CATMain()
Dim doc As Document
Set doc = CATIA.ActiveDocument
Dim MsgBoxRes As String
If doc.Saved Then
doc.Close
Else
MsgBoxRes = MsgBox("Document has changes, save & close?", vbOKCancel)
If MsgBoxRes = "1" Then
If Left(doc.FullName, 1) <> "Y" Then
CATIA.StartCommand "save as"
doc.Close
Else
doc.Save
doc.Close
End If
Else
Exit Sub
End If
End If
End Sub
当我使用“另存为”对话框并保存我的文档时,代码并不总是正确恢复或跳过下一个命令,我不知道是什么情况在这儿。 (实际上这意味着我的文件不会被关闭) 因此我尝试插入一个没有改变任何东西的睡眠时间,所以我也尝试用DoEvents方法添加Do Until循环,这完全打破了宏。 在这里看到我未能成功解决问题:
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub CATMain()
Dim doc As Document
Set doc = CATIA.ActiveDocument
Dim MsgBoxRes As String
If doc.Saved Then
doc.Close
Else
MsgBoxRes = MsgBox("Document has changes, save & close?", vbOKCancel)
If MsgBoxRes = "1" Then
If Left(doc.FullName, 1) <> "Y" Then
CATIA.StartCommand "save as"
DoEvents
Do Until doc.Saved
DoEvents
If doc.Saved Then doc.Close
DoEvents
Sleep 100
Loop
Else
doc.Save
doc.Close
End If
Else
Exit Sub
End If
End If
End Sub
我的问题现在变得更糟;在Do循环中,VB不允许CATIA或用户做任何事情,我需要使用 Ctrl + Break 退出循环。
有没有办法让这段代码仍在使用catia.start命令&#34;另存为&#34; ?
我知道应该可以通过创建用户浏览并选择正确保存位置的自己的对话框来完成同样的事情,但如果可能的话,我更愿意只使用catia.start命令。 / p>
答案 0 :(得分:0)
经过一段时间的测试和实验,我终于找到了一种方法来使用startcommand“另存为”方法,让我的代码表现得一致。
问题中发布的代码的第一部分仅偶尔表现不规律,但即使用户在“另存为”对话框中选择“取消”,此代码也会关闭文档,完全放弃对文档所做的任何工作,因为上次它被保存了。这当然是不可接受的行为 因此,必须在save as命令之后执行.saved检查,如下所示:
Sub CATMain()
Dim doc As Document
Dim MsgBoxRes As String
Set doc = CATIA.ActiveDocument
If doc.Saved Then
doc.Close
Else
MsgBoxRes = MsgBox("Document has changes, save & close?", vbOKCancel)
If MsgBoxRes = "1" Then
If Left(doc.FullName, 1) <> "Y" Then
CATIA.StartCommand "save as"
If doc.Saved Then doc.Close
Else
doc.Save
doc.Close
End If
End If
End If
End Sub
然而,当运行此代码时,宏跳过代码的原始问题/完全停止(仍然不确定这里是什么情况)现在将在100%的时间发生。
我终于找到了一个简单的解决方法,似乎在100%的时间内表现得像预期的那样; save as命令之后的一个简单的.activate似乎解决了所有问题,如下所示:
Sub CATMain()
Dim doc As Document
Dim MsgBoxRes As String
Set doc = CATIA.ActiveDocument
If doc.Saved Then
doc.Close
Else
MsgBoxRes = MsgBox("Document has changes, save & close?", vbOKCancel)
If MsgBoxRes = "1" Then
If Left(doc.FullName, 1) <> "Y" Then
CATIA.StartCommand "save as"
doc.Activate
If doc.Saved Then doc.Close
Else
doc.Save
doc.Close
End If
End If
End If
End Sub