SetVariable Method (ActiveX)

Sets the value of an AutoCAD system variable.

Supported platforms: Windows only

Signature

VBA:

object.SetVariable Name, Value
object

Type: Document

The object this method applies to.

Name

Access: Input-only

Type: String

The name of the system variable to set.

Value

Access: Input-only

Type: Variant

The new value for the specified system variable.

Return Value (RetVal)

No return value.

Remarks

When setting system variables, AutoCAD may require integers, text, or double values. Passing the wrong data type (for example, passing a variant of type double when an integer is required) will generate an error. The easiest way to avoid this is to use one of the Cxxx functions, such as CInt(), to explicitly type your data before passing it.

For a list of all AutoCAD system variables and their types, please refer to "System Variables" in the AutoCAD Help system.

Examples

VBA:

Sub Example_SetVariable()
    ' This example sets various system variables, each of
    ' a different data type.
    
    Dim sysVarName As String
    Dim sysVarData As Variant
    Dim DataType As Integer
    
    ' Set FILEDIA system variable (data type Integer) to 1. NOTE that
    ' you need to declare a variable as the data type of system variable,
    ' assign data to that variable and then make it variant type
    Dim intData As Integer
    sysVarName = "FILEDIA"
    intData = 1
    sysVarData = intData    ' Integer data
    ThisDrawing.SetVariable sysVarName, sysVarData
    
    ' Check the variable using GetVariable
    sysVarData = ThisDrawing.GetVariable(sysVarName)
    MsgBox sysVarName & " = " & sysVarData, , "SetVariable Example"
    
    ' Set DCTCUST system variable (data type String) to "My Custom Dictionary"
    Dim strData As String
    sysVarName = "DCTCUST"
    strData = "My Custom Dictionary"
    sysVarData = strData        ' String data
    ThisDrawing.SetVariable sysVarName, sysVarData
    
    ' Check the variable using GetVariable
    sysVarData = ThisDrawing.GetVariable(sysVarName)
    MsgBox sysVarName & " = " & sysVarData, , "SetVariable Example"
   
    ' Set CHAMFERA system variable (data type Double) to 1.5
    Dim dataDouble As Double
    sysVarName = "CHAMFERA"
    dataDouble = 1.5
    sysVarData = dataDouble ' Double data
    ThisDrawing.SetVariable sysVarName, sysVarData
    ' Check the variable using GetVariable
    sysVarData = ThisDrawing.GetVariable(sysVarName)
    MsgBox sysVarName & " = " & sysVarData, , "SetVariable Example"
   
    ' Set INSBASE system variable (data type array) to (1.0,1.0,0)
    Dim arrayData3D(0 To 2) As Double
    sysVarName = "INSBASE"
    arrayData3D(0) = 1#: arrayData3D(1) = 1#: arrayData3D(2) = 0
    sysVarData = arrayData3D    ' 3D array data
    ThisDrawing.SetVariable sysVarName, sysVarData
    ' Check the variable using GetVariable
    sysVarData = ThisDrawing.GetVariable(sysVarName)
    MsgBox sysVarName & " = " & sysVarData(0) & ", " & sysVarData(1) & ", " & sysVarData(2), , "SetVariable Example"
    
End Sub

Visual LISP:

(vl-load-com)
(defun c:Example_SetVariable()
    ;; This example sets various system variables, each of
    ;; a different data type.
    
    ;; Set FILEDIA system variable (data type Integer) to 1. NOTE that
    ;; you need to declare a variable as the data type of system variable,
    ;; assign data to that variable and then make it variant type
    (setq sysVarName "FILEDIA"
          intData 1
          sysVarData intData)    ;; Integer data
    (vla-SetVariable doc sysVarName sysVarData)
    
    ;; Check the variable using GetVariable
    (setq sysVarData (vlax-variant-value (vla-GetVariable doc sysVarName)))
    (alert (strcat sysVarName " = " (itoa sysVarData)))
    
    ;; Set DCTCUST system variable (data type String) to "My Custom Dictionary"
    (setq sysVarName "DCTCUST"
           strData "My Custom Dictionary"
           sysVarData strData)        ;; String data
    (vla-SetVariable doc sysVarName sysVarData)
    
    ;; Check the variable using GetVariable
    (setq sysVarData (vlax-variant-value (vla-GetVariable doc sysVarName)))
    (alert (strcat sysVarName " = " sysVarData))
   
    ;; Set CHAMFERA system variable (data type Double) to 1.5
    (setq sysVarName "CHAMFERA"
          dataDouble 1.5
          sysVarData dataDouble)      ;; Double data
    (vla-SetVariable doc sysVarName sysVarData)

    ;; Check the variable using GetVariable
    (setq sysVarData (vlax-variant-value (vla-GetVariable doc sysVarName)))
    (alert (strcat sysVarName " = " (rtos sysVarData 2)))
   
    ;; Set INSBASE system variable (data type array) to (1.0,1.0,0)
    (setq sysVarName "INSBASE"
          arrayData3D (vlax-3d-point 1 1 0)
          sysVarData arrayData3D)      ;; 3D array data
    (vla-SetVariable doc sysVarName sysVarData)

    ;; Check the variable using GetVariable
    (setq sysVarData (vlax-variant-value (vla-GetVariable doc sysVarName)))
    (alert (strcat sysVarName " = " (rtos (vlax-safearray-get-element sysVarData 0) 2) ", "
                                    (rtos (vlax-safearray-get-element sysVarData 1) 2) ", "
                                    (rtos (vlax-safearray-get-element sysVarData 2) 2)))
)