oldguy 发表于 2022-7-6 08:32:37

我测试了一下,似乎AutoCAD不允许人们在AutoCAD之外使用ObjectDBX。。。
 
当我使用AutoCAD VBA宏提取这几百个图形时,只需要大约5分钟,比2小时快得多。但是我需要Excel。。。。
 
顺便问一下,您知道使用Excel宏运行AutoCAD VBA宏的方法吗?
 
或者,您知道如何使AutoCAD宏成为菜单项吗?所以用户可以点击该菜单并运行宏。

dbroada 发表于 2022-7-6 08:35:55

阿斯米显然比我更了解他的东西,但你在excel中需要什么格式?我将边界信息导出到csv文件中,并用excel打开该文件。这是你的选择吗?

ASMI 发表于 2022-7-6 08:41:24

 
似乎。。。尽管所有属性和方法都是可见的,但程序仍会给出一个错误。
 
但是,可以从Autocad中很好地访问Excel。将引用设置为Excel并尝试:
 
Function GetExcelObject() As Object
Set GetExcelObject = CreateObject("Excel.Application")
End Function
 
 
这很简单,我明天会告诉你。对不起,我再次坐到凌晨1:45。明天(今天)我应该早上6点起床上班。睡觉

oldguy 发表于 2022-7-6 08:42:03

感谢您的回复,以下是我用来访问Excel的内容:

apExcel=getObject(,"Excel.Application")
apExcel.ActiveSheet.Cells(1,1)="xxxx"

它将尝试控制当前打开的Excel文件,然后对其进行更改。我想的是,使用Excel宏打开AutoCAD,然后自动加载AutoCAD VBA宏并运行它。
我知道在两个应用程序之间来回跳转是不好的,但这似乎是我唯一的选择。
 
我想做的是:
尝试更新Excel文件,该文件列出数百张图纸的图纸编号、说明、修订号、修订日期等。

ASMI 发表于 2022-7-6 08:46:42

 
我认为可以运行AutoCAD宏>使用ObjectDBX打开图形并查找属性(在AutoCAD中工作快速且良好)>从AutoCAD打开Excel并用数据填充单元格(也很好)。
 
>dbroada公司
 
太好了。然而,老家伙想要完全自动化和速度。对我们来说,这不仅是结果,也是编程过程,我们学到了很多新的东西

dbroada 发表于 2022-7-6 08:49:39

这就是为什么我要求澄清他的使用。
 
我可以看出你给了他很好的建议,但如果他只想要一个文件名与标题(或类似)的列表,他不需要把它复杂化这么多。

oldguy 发表于 2022-7-6 08:52:37

我不想把事情弄得那么复杂,但我想让事情尽可能的人性化。所以您知道在Excel宏中自动运行AutoCAD宏的方法吗?喜欢发送VBALoad命令并加载特定宏,然后以某种方式运行它?
 
因为当人们想要更新电子表格时,他们会首先打开电子表格。
 
谢谢

oldguy 发表于 2022-7-6 08:54:23

嗯,我找到了方法,只需将AutoCAD宏嵌入空白图形中,然后在打开空白图形时自动运行宏。丑陋,但工作。
 
ASMI,您能告诉我如何制作一个自定义的autocad菜单项,该菜单项链接到autocad VBA宏吗?
谢谢

ASMI 发表于 2022-7-6 08:58:47

 
好啊
 
大多数人使用(命令“\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)

Issam Rasheed 发表于 2022-7-6 09:00:49

我还尝试对一些从tif格式转换为autocad的图形执行相同的操作?如何做到这一点?请告知。
页: 1 [2]
查看完整版本: 如何从中提取信息