・ VBA から LISP アプリケーションを実行する

VBA から LISP アプリケーションを実行するには、SendCommand メソッドを使います
但し、ActiveX メソッドが使用可能なコマンドは発行してはいけません (forEX: SendCommand "VBALOAD")
この場合は、代わりに LoadDVB メソッドを使用します

例1)
'***********************************************************************************************
'VBA から LISP アプリケーションを実行する
'(load "Jo_lay_off") (Jo_Lay_off) を実行
'Jo_lay_off.lsp をサポートディレクトリにおいておく必要があります
'***********************************************************************************************
Sub Jo_cal_lisp()

  ThisDrawing.SendCommand "(" & "load" & """Jo_lay_off""" & ")" & vbCr
  ThisDrawing.SendCommand "(" & "Jo_lay_off" & ")" & vbCr

End Sub

例1の場合は、LISP アプリケーションの実行はできますが、終了したかどうかはわかりません。
SendCommand で LISP アプリケーションを実行した場合、通常、同期をとりますが、LISP アプリケーションがユーザー入力を求めたりした場合、入力を始めると直ちに復帰し、非同期処理を続行します。
そこで、LISP アプリケーションの終了を知るためには、例2のように、EndLISP イベントを使用します。

例2)
'一般モジュールへの記述
'***********************************************************************************************
'VBA から LISP アプリケーションを実行する
'(load "Jo_lay_off") (Jo_Lay_off) を実行
'Jo_lay_off.lsp をサポートディレクトリにおいておく必要があります
'***********************************************************************************************

Sub Jo_cal_lisp()

  ThisDrawing.SendCommand "(" & "load" & """Jo_lay_off""" & ")" & vbCr
  ThisDrawing.SendCommand "(" & "Jo_lay_off" & ")" & vbCr

End Sub

'ThisDrawing への記述 
'***********************************************************************************************
'Document レベルでの EndLISP イベントハンドラ
'***********************************************************************************************

Private Sub AcadDocument_EndLISP()

  MsgBox "LISP による処理完了!"

End Sub

しかし、例2では、メッセージが2回出てしまいます。それに、一回、図面に埋め込んでしまうと、別のLISPを動かしても、メッセージが表示されてしまいます。Document レベルのイベントは、VBAプロジェクトのロードとともに、有効になってしまうためです。
そこで、例3のように、Application レベルのイベントを利用して、必要なときだけ、イベントを有効にすることができます。
そのためには、クラスモジュールを作成して、AcadApplication タイプのオブジェクトをイベントに宣言しなくてはなりません。

例3)
'一般モジュールへの記述
'***********************************************************************************************
'VBA から LISP アプリケーションを実行する
'(load "Jo_lay_off") (Jo_Lay_off) を実行
'Jo_lay_off.lsp をサポートディレクトリにおいておく必要があります
'***********************************************************************************************

  Dim X As New EventClassModule 'グローバルな変数としてクラスモジュールを宣言(ローカル変数だと、イベントハンドラから無効にできない)

Sub Jo_cal_lisp()

  ThisDrawing.SendCommand "(" & "load" & """Jo_lay_off""" & ")" & vbCr
  Set X.App = ThisDrawing.Application 'Application レベルのイベントを有効
  ThisDrawing.SendCommand "(" & "Jo_lay_off" & ")" & vbCr

End Sub

Sub unInitializeEvents() 'イベントハンドラから呼び出す
  Set X.App = Nothing 'Application レベルのイベントを無効
End Sub

'クラスモジュール(EventClassModule) への記述 
'***********************************************************************************************
'Application レベルでの EndLISP イベントハンドラ
'***********************************************************************************************

Private Sub App_EndLISP()

  MsgBox "LISP による処理完了!"
  Call unInitializeEvents 'Application レベルのイベントを無効にするプロシージャーの呼び出し

End Sub

これを応用すれば、LISPの連続実行や、ファイルを開いて繰り返し実行することも可能になります