You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AutoCAD加载LISP函数关联VBA的步骤及运行报错解决

问题描述

VBA无法直接获取刚放置到AutoCAD屏幕上的对象句柄,已知AutoCAD LISP可通过entget(entlast)获取句柄。我找到了一段LISP代码并保存为Application.1.lsp:

(defun *entlast* ()
(cdr (assoc 5 (entget (entlast))))
)

同时找到用于关联VBA与LISP的代码:

Public Function entLast() As AcadEntity
    Dim vl As Object
    Dim vlFun As Object
    Dim Result As String
    
    Set vl = ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
    Set vlFun = vl.ActiveDocument.Functions
    Result = vlFun.Item("*entlast*")
    Set entLast = ThisDrawing.HandleToObject(Result)    
End Function
    
Public Sub testme()
    Dim ent As AcadEntity
    Set ent = entLast
    Debug.Print ent.ObjectName
End Sub

已通过LISP编辑器加载上述LISP函数,但运行VBA宏的testme子程序时,弹出报错:

Problem in loading application.

现需解决:加载LISP函数并与VBA建立连接的正确步骤,以及上述报错的修复方案。


解决方案

一、LISP函数加载的正确步骤

  1. 路径配置:将Application.1.lsp放在AutoCAD默认搜索路径下(如安装目录的Support文件夹),避免加载时出现路径找不到的问题。
  2. 加载方式:
    • 命令行手动加载:在AutoCAD命令行输入(load "Application.1.lsp"),回车后无报错则表示加载成功。
    • 自动加载:将LISP文件路径添加到acad.lsp或acaddoc.lsp中,实现AutoCAD启动时自动加载该函数。

二、VBA代码修正与连接逻辑优化

原VBA代码存在两个核心问题:一是仅获取了LISP函数对象,未触发函数执行;二是VL.Application的调用逻辑有误,导致无法正确获取LISP执行结果。修正后的代码如下:

Public Function entLast() As AcadEntity
    Dim vl As Object
    Dim lispResult As Variant
    
    ' 初始化Visual LISP接口
    Set vl = ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
    ' 执行自定义LISP函数,获取最新实体的句柄
    lispResult = vl.Eval("(*entlast*)")
    
    ' 通过句柄映射到AutoCAD实体对象
    If Not IsEmpty(lispResult) Then
        Set entLast = ThisDrawing.HandleToObject(lispResult)
    End If
End Function

Public Sub testme()
    Dim ent As AcadEntity
    Set ent = entLast
    If Not ent Is Nothing Then
        Debug.Print ent.ObjectName
    Else
        Debug.Print "未找到最新实体或获取失败"
    End If
End Sub

三、报错验证与排查

  1. 验证LISP加载状态:在AutoCAD命令行输入(*entlast*),如果返回一串字符串(实体句柄),说明LISP函数加载正常。
  2. 检查VBA支持状态:通过AutoCAD的OPTIONS对话框→「文件」选项卡,确认VBA支持组件已加载(部分版本需手动启用)。
  3. 测试流程:先在AutoCAD中绘制一个实体(如直线、圆),再运行testme宏,查看VBA编辑器的立即窗口是否输出实体名称。

内容的提问来源于stack exchange,提问作者JMc1999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:57:15