当我使用AutoCAD VBA宏提取这几百个图形时,只需要大约5分钟,比2小时快得多。但是我需要Excel。。。。
顺便问一下,您知道使用Excel宏运行AutoCAD VBA宏的方法吗?
或者,您知道如何使AutoCAD宏成为菜单项吗?所以用户可以点击该菜单并运行宏。 阿斯米显然比我更了解他的东西,但你在excel中需要什么格式?我将边界信息导出到csv文件中,并用excel打开该文件。这是你的选择吗?
似乎。。。尽管所有属性和方法都是可见的,但程序仍会给出一个错误。
但是,可以从Autocad中很好地访问Excel。将引用设置为Excel并尝试:
Function GetExcelObject() As Object
Set GetExcelObject = CreateObject("Excel.Application")
End Function
这很简单,我明天会告诉你。对不起,我再次坐到凌晨1:45。明天(今天)我应该早上6点起床上班。睡觉 感谢您的回复,以下是我用来访问Excel的内容:
apExcel=getObject(,"Excel.Application")
apExcel.ActiveSheet.Cells(1,1)="xxxx"
它将尝试控制当前打开的Excel文件,然后对其进行更改。我想的是,使用Excel宏打开AutoCAD,然后自动加载AutoCAD VBA宏并运行它。
我知道在两个应用程序之间来回跳转是不好的,但这似乎是我唯一的选择。
我想做的是:
尝试更新Excel文件,该文件列出数百张图纸的图纸编号、说明、修订号、修订日期等。
我认为可以运行AutoCAD宏>使用ObjectDBX打开图形并查找属性(在AutoCAD中工作快速且良好)>从AutoCAD打开Excel并用数据填充单元格(也很好)。
>dbroada公司
太好了。然而,老家伙想要完全自动化和速度。对我们来说,这不仅是结果,也是编程过程,我们学到了很多新的东西 这就是为什么我要求澄清他的使用。
我可以看出你给了他很好的建议,但如果他只想要一个文件名与标题(或类似)的列表,他不需要把它复杂化这么多。 我不想把事情弄得那么复杂,但我想让事情尽可能的人性化。所以您知道在Excel宏中自动运行AutoCAD宏的方法吗?喜欢发送VBALoad命令并加载特定宏,然后以某种方式运行它?
因为当人们想要更新电子表格时,他们会首先打开电子表格。
谢谢 嗯,我找到了方法,只需将AutoCAD宏嵌入空白图形中,然后在打开空白图形时自动运行宏。丑陋,但工作。
ASMI,您能告诉我如何制作一个自定义的autocad菜单项,该菜单项链接到autocad VBA宏吗?
谢谢
好啊
大多数人使用(命令“\u vbaload”…加载VBA项目和(命令“\u vbarun”...用于运行程序。然而,这对我来说并不愉快,因为这些命令不会返回关于成功结束的值,并且在反复尝试加载项目时,会出现警报窗口“project Xxxx”。vdb已加载'。我使用自己的VisualLISP函数来摆脱这些缺陷。它具有以下语法:
(asmi_RunMacro "ProjectName.vdb" "!Module.Macro" Out)
如果参数“Out”等于T(True),则函数在成功启动宏时返回T,在失败时返回NIL(False)。如果参数“Out”等于NIL,则该函数不返回任何值,只返回有关命令行中错误的消息。
对于按钮(或弹出菜单)宏,您应该写短*。lsp文件例如:
(defun c:numb()
(asmi_RunMacro "AsmiTools.dvb" "!Numerator.Numerator_Show" nil)
); end c:numb
在这种情况下,按钮的宏应如下所示:
^C^Cnumb
或命令行中的“numb”。
带有短lisp的文件和带有以下代码的文件应添加到“工具>加载应用程序…”。。。启动套件'
(defun asmi_GetVBEObject(errMess / vbeObj)
(if
(vl-catch-all-error-p
(setq vbeObj
(vl-catch-all-apply
'vla-get-VBE
(list(vlax-get-acad-object))
); end vl-catch-all-apply
); end setq
); end vl-catch-all-error-p
(progn
(if errMes
(alert errMess)
); end if
nil
); end progn
vbeObj
); end if
); end of asmi_GetVBEObject
(defun asmi_GetVBAProjectsList(/ vbeObj vbaProj pCount
projLst curProj prName)
(if
(setq vbeObj
(asmi_GetVBEObject ">>> ERROR. Can't get VBE object! <<<"))
(progn
(setq vbaProj
(vlax-get-property vbeObj 'VBProjects)
pCount
(vlax-get-property vbaProj 'Count)
projLst '()
); end setq
(while(/= pCount 0)
(if
(and
(not
(vl-catch-all-error-p
(setq curProj
(vl-catch-all-apply
'vlax-invoke-method
(list vbaProj 'Item pCount)
); end vl-catch-all-apply
); end setq
); end vl-catch-all-error-p
); end not
(not
(vl-catch-all-error-p
(setq prName
(vl-catch-all-apply
'vlax-get-property
(list curProj 'FileName)
); end vl-catch-all-apply
); end setq
); end vl-catch-all-error-p
); end not
); end and
(setq projLst
(append projLst
(list prName)
); end append
); end setq
); end if
(setq pCount(1- pCount))
); end while
); end progn
); end if
projLst
); end of asmi-GetVBAProjectsList
(defun asmi_RunMacro(Project Macro Out / acApp dvbPath
actDoc errMes outVal lFlag )
(setq acApp
(vlax-get-acad-object))
(if
(not
(member Project
(asmi_GetVBAProjectsList)))
(if
(setq dvbPath
(findfile Project))
(if
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-loaddvb
(list acApp dvbPath)
); end vl-catch-all-apply
); end vl-catch-all-error-message
(princ
(strcat "\n>>> ERROR. Can't load VBA project \""
Project "\" >>> ")
); end princ
(setq lFlag T)
); end if
(princ
(strcat "\n>>> ERROR. VBA project \""
Project "\" not found! <<< "); end strcat
); end princ
); end if
(setq lFlag T)
); end if
(if lFlag
(if
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-runmacro
(list acApp
(strcat Project Macro)
); end list
); end vl-catch-all-apply
); end vl-catch-all-error-message
(princ
(strcat "\n>>> ERROR. Can't run VBA macro \""
Macro "\" >>> ")
); end princ
(setq outVal T)
); end if
); end if
(if Out outVal(princ))
); end of asmi_RunMacro
(vl-load-com)
我还尝试对一些从tif格式转换为autocad的图形执行相同的操作?如何做到这一点?请告知。
页:
1
[2]