乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 51|回复: 3

[编程交流] VBA宏运行但不执行

[复制链接]

6

主题

24

帖子

18

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 21:56:23 | 显示全部楼层 |阅读模式
大家好,
 
我终于开始编写自己的VBA宏,该宏可以批量创建图形、附着外部参照、设置图层状态等。
 
但我发现的问题是,如果我在打开计算机而不运行autocad后运行脚本,一切都会正常运行,脚本会执行所需的一切,并向autocad发送命令。
 
如果我决定更改一个值,并且打开了autocad的同一个实例(宏最初创建的实例),则一切正常。但是,如果我关闭AutoCAD并重新打开它,或者已经打开了一个AutoCAD实例(与最初创建的宏分离),脚本将运行,但什么也没有发生。如果我关闭excel文件并重新打开。宏将运行
 
这是我的密码
 
我假设脚本运行是因为on error resume next允许它运行,但是它没有做任何事情,因为进程没有被终止?
回复

使用道具 举报

6

主题

24

帖子

18

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 22:25:24 | 显示全部楼层
只是补充一些评论,我实际上认为我可能是在处理一个孤儿acad。exe进程。关闭这些物体的最佳方式是什么。
回复

使用道具 举报

12

主题

175

帖子

77

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
149
发表于 2022-7-6 22:37:51 | 显示全部楼层
这可能与
-您使用
参考,它将始终坚持到VBA宏首次启动时打开并可用的第一个AutoCAD会话
因此,如果该会话被关闭,代码中的引用将抛出错误(一些“远程服务器不存在或不可用”,或“错误自动化”之类的东西)
-您同时使用(以及搁置)“acadApp”变量
 
此外,“GetObject()”方法始终返回Windows Running Object表中可用的AutoCAD的第一个实例
 
因此,要(希望)彻底理解上述内容的含义,并且(更希望!)了解如何处理,让我们试试这个:
-关闭所有包含宏的AutoCAD会话和Excel工作簿
-打开AutoCAD会话#1并将“Drawing1”设置为其活动文档名称
-打开AutoCAD会话#2并将“Drawing2”设置为其活动文档名称
-打开Excel及其VBA IDE并键入此简单宏
  1. 2

 
-运行该宏:
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会话)重置它
 
 
希望这会有所帮助
回复

使用道具 举报

6

主题

24

帖子

18

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 23:16:23 | 显示全部楼层
没错,这肯定是使用了acadApp和Autocad。导致错误的Activedocument。
 
感谢您的详细回复
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 13:30 , Processed in 0.544368 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表