这可能与
-您使用
参考,它将始终坚持到VBA宏首次启动时打开并可用的第一个AutoCAD会话
因此,如果该会话被关闭,代码中的引用将抛出错误(一些“远程服务器不存在或不可用”,或“错误自动化”之类的东西)
-您同时使用(以及搁置)“acadApp”变量
此外,“GetObject()”方法始终返回Windows Running Object表中可用的AutoCAD的第一个实例
因此,要(希望)彻底理解上述内容的含义,并且(更希望!)了解如何处理,让我们试试这个:
-关闭所有包含宏的AutoCAD会话和Excel工作簿
-打开AutoCAD会话#1并将“Drawing1”设置为其活动文档名称
-打开AutoCAD会话#2并将“Drawing2”设置为其活动文档名称
-打开Excel及其VBA IDE并键入此简单宏
-运行该宏:
1) 你会得到
“AutoCAD.Application.ActiveDocument.Name:Drawing1.dwg”
2) 按OK
你会得到
“acadapp.ActiveDocument.Name:Drawing1.dwg”
3) 按OK
4) 在信息框中询问
“停下来?”
-不要按消息框上的任何按钮
-打开新的AutoCAD会话#3,并将其活动文档命名为“Drawing3”
-切换到AutoCAD会话#1并将其关闭
-最后返回消息框并按“否”
您将从中收到一条错误消息
因为“acadApp”变量仍然引用它上次设置的值
语句,从而指向当时可用的第一个AutoCAD会话,即您刚刚关闭的会话#1!
5) 跳过该语句(只需将黄色箭头拖动到下一个),然后按F5键使宏继续
宏将静默(无错误)处理
语句,其中“acadApp”变量指向会话#2,这是第一个可用的AutoCAD会话“now”(与“ever”相反)
您将再次收到错误消息!
这次是从
由于“AutoCAD.Application”引用仍然指向“曾经”可用的第一个AutoCAD会话(与“现在”相反),即在宏启动时可用的第一个会话(会话#1,您在步骤4中关闭),它始终会这样做,直到您停止/完成宏并关闭其工作簿!
6) 跳过该语句,按F5并使宏继续
你会得到
“acadapp.ActiveDocument.Name:Drawing2.dwg”
因此没有错误。这是因为acadApp变量已重置为会话#2处的点(如步骤5开头所述)
7) 按“OK”
8)在信息框询问
“停下来?”
-不要按消息框上的任何按钮
-切换到AutoCAD会话#2并将其关闭
-最后返回消息框并按“否”
嗯,现在你应该知道该期待什么了
您将从中收到一条错误消息
由于“acadApp”变量仍在引用AutoCAD会话#2,因此上次将其设置为,而您刚刚再次将其关闭!(与步骤4的机制相同)
9) 跳过抛出错误的语句(您已经知道了,它是“acadApp.ZoomExtents”语句),然后按F5使宏继续运行
宏将静默处理
现在将有“acadApp”变量指向会话#3的语句,它是第一个(也是唯一一个)可用的AutoCAD会话“now”
而且,是的,你会收到一条错误消息,来自那个讨厌的
因为“AutoCAD.Application”参考仍然指向“有史以来”第一个可用的AutoCAD会话(即早已死亡但仍在我们心中的会话#1)
10) 跳过该语句,按F5并使宏继续
当然你会得到
“acadapp.ActiveDocument.Name:Drawing3.dwg”
嗯,底线是什么?
始终通过设置和使用“acadApp”
参考,而不是使用“AutoCAD应用程序”一
完成autocad会话后,请退出该会话,并将其引用(acadApp)设置为nothing或其他autocad会话
一旦退出AutoCAD会话,您将永远无法引用它(当然!)同样,如果acaApp变量指向该会话,则必须使用GetObject()方法(此时将获得第一个可用会话-“now”)或CreateObject()方法(将启动一个全新的AutoCAD会话)重置它
希望这会有所帮助 |