VBE Property (ActiveX)

Gets the VBAIDE extensibility object.

Supported platforms: Windows only

Signature

VBA:

object.VBE
object

Type: Application

The object this property applies to.

Property Value

Read-only: Yes

Type: Microsoft VBE object

The VBAIDE extensibility object.

Remarks

This property allows you to access the VBA IDE object model from AutoCAD's object model. The property will throw an exception if the VBAIDE is not available. For example, the VBAIDE is not available if the acvba.arx app has not been loaded.

The following line of code returns the name of the active VBA project description string:

ThisDrawing.Application.VBE.ActiveVBProject.Description

Examples

VBA:

Sub Example_VBE()
    ' This example uses the VBA IDE extensibility model to dynamically
    ' create a VBA subroutine. After running this example, see the first line of code
    ' in the VBA IDE code window to see a new subroutine. Then 
    ' remove the new subroutine before continuing.

    Dim VBEModel As Object
    Dim newRoutine As String
    
    Set VBEModel = VBE  ' Get the VBE object
    
    ' Define new subroutine to be added. This could be created dynamically from user feedback.
    newRoutine = "Sub Dynamic_Procedure()" & vbCrLf
    newRoutine = newRoutine & vbTab & "MsgBox ""New subroutine.""" & vbCrLf
    newRoutine = newRoutine & "End Sub" & vbCrLf
    
    ' Insert new subroutine
    VBEModel.CodePanes(1).CodeModule.InsertLines 1, newRoutine
    
    MsgBox "A new subroutine was added called Dynamic_Procedure."
End Sub

Visual LISP:

(vl-load-com)
(defun c:Example_VBE()
    ;; This example uses the VBA IDE extensibility model to dynamically
    ;; create a VBA subroutine. After running this example, see the first line of code
    ;; in the VBA IDE code window to see a new subroutine. Then 
    ;; remove the new subroutine before continuing.

    ;; Note: You might need to add a code module to the default project first.
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))

    (setq VBEModel (vla-get-VBE acadObj))  ;; Get the VBE object
    
    ;; Define new subroutine to be added. This could be created dynamically from user feedback.
    (setq newRoutine (strcat "Sub Dynamic_Procedure()"
                             "\n    MsgBox \"New subroutine.\""
                             "\nEnd Sub"))
    
    ;; Insert new subroutine
    (vlax-invoke-method (vlax-get-property (vlax-invoke-method (vlax-get-property VBEModel 'CodePanes) 'Item 1) 'CodeModule) 'InsertLines 1 newRoutine)
    
    (alert "A new subroutine was added called Dynamic_Procedure.")
)