Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sentencias
Eventos
Mdulo
Objeto
Propiedades
Sentencias
Procedimientos
Las aplicaciones VBA se realizan mediante el editor VBA que se encuentra en el men Herramientas,
Macro, Editor Visual Basic. Mediante Alt+F11 se puede ir del editor VBA a Autocad y viceversa. La
interfaz del editor VBA es la siguiente:
1.1 DEFINICIONES
Aplicacin o Programa: Conjunto de bloques de instrucciones y de objetos de control que realizan
una funcin o tarea. Se divide en mdulos.
Mdulo: Pueden ser de tres clases:
Formulario: Ventanas que sirven de interfaz de la aplicacin. Contiene controles, eventos,
declaraciones de variables y procedimientos.
Estndar: Contiene declaraciones de variables y procedimientos.
Clase: Contiene definiciones de nuevos objetos con sus mtodos y propiedades.
Procedimiento: Conjunto de instrucciones que forman el cdigo. Pueden ser subrutinas o funciones.
Objeto: Cada uno de los elementos sobre los que acta el programa. Se agrupan por clases:
Objetos del sistema: objetos especiales del sistema operativo (Err, Printer, Debug, etc.).
Objetos de formulario: Contiene el propio formulario y todos los controles contenidos en l.
Objetos de Autocad: Objetos de dibujo, tablas de smbolos, objetos no grficos y
preferencias.
Evento: Cdigo que se ejecuta cada vez que se realiza una accin sobre un objeto: clic, doble clic,
arrastrar, cargar, modificar, etc.
Propiedad: Atributos de los objetos: nombre, color, fuente, posicin, etc.
Mtodo: Funcin que realiza una accin sobre un objeto. As por ejemplo Add, Close o GetFormat
para los objetos de formulario o AddCircle, Move, Copy o GetAngle para los objetos de AutoCAD.
1.2 EL EDITOR VBA:
En la figura 2 se muestran los componentes tpicos de la interfaz:
Barra de Mens
Barra de herramientas estndar: Contiene los botones con las herramientas mas comunes.
Ventana Project: Estructura en rbol con la informaron referente al proyecto actual: Objetos,
Formularios y Mdulos
Ventana UserForm (Cdigo) contiene el cdigo correspondiente al formulario UserForm
Ventana UseForm (UserForm) contiene el formulario y los controles de UserForm.
Ventana Propiedades: Muestra las propiedades del objeto seleccionado.
Cuadro de herramientas: Contiene los controles con los que se disean los formularios.
1.3 APLICACIONES EN VBA
Estn compuestas de mdulos, como mnimo uno, pudiendo tener varios de cada uno de los tres
tipos posibles. Dichos mdulos contienen el cdigo de la aplicacin, formado por declaraciones de
variables u objetos, procedimientos y eventos (solo en formularios o en el objeto ThisDrawing). El
objeto ThisDrawing es el documento de Autocad asociado con el proyecto, que puede llevar cdigo
como cualquier otro modulo, declaraciones, eventos y procedimientos.
Prctica 9
Pg: 1
Universitat Jaume I
Modulo de Formulario: Sirven de interfaz con el usuario. Contienen objetos grficos denominados
controles (botones, cuadros de texto, listas, etc.) mediante los que se puede mostrar e introducir
informacin. Adems tambin contienen cdigo: definiciones de variables, de procedimientos y de
eventos. Los eventos se autoejecutan al detectarse acciones sobre los controles como por ejemplo, al
hacer clic sobre un botn.
Modulo estndar: Contiene cdigo nicamente: definiciones de variables y procedimientos. Estas
definiciones son publicas (pueden ser utilizadas en cualquier modulo), mientras que las definiciones
de un modulo formulario son privadas para ese modulo.
Modulo clase: Se emplea nicamente para crear nuevos tipos objetos con sus propiedades y sus
mtodos. VBA emplea este tipo de mdulos para definir los objetos que son propios de Autocad y que
no existen en Visual Basic.
La programacin en VBA esta guiada por eventos. Esto significa que son los propios objetos y
controles, junto con las intervenciones del usuario los que dirigen la ejecucin. El cdigo de la
aplicacin se encuentra repartido por los distintos mdulos. Para acceder a la ventana de cdigo hay
varias opciones:
1. En la ventana Proyecto pulsar el botn derecho sobre algn objeto de los que componen la aplicacin y
elegir Ver Cdigo.
2. En el men desplegadle elegir Ver y luego Cdigo
3. Hacer doble clic sobre un objeto de la ventana Proyecto
4. Pulsar F7.
Al acceder a la ventana de cdigo aparecen dos listas desplegables. La de la izquierda para
seleccionar el objeto y la de la derecha para seleccionar el evento al que se va a asociar el cdigo
que se introduzca. Por ejemplo, en el cdigo de se puede elegir AcadDocument y ObjectErased para
acceder a la rutina AcadDocument_ObjectErased que se ejecutara cada vez que se borre un objeto
del dibujo actual. En todos los mdulos aparece en la lista de la izquierda el elemento General y al
elegirlo aparece en la derecha el elemento Declaraciones. En esta seccin es donde deben definirse
las variables y procedimientos que se van a usar en todo el modulo.
Prctica 9
Pg: 2
Universitat Jaume I
En el men de edicin aparecen las tpicas opciones (cortar, pegar, etc.) y adems hay cinco
herramientas que resultan muy tiles:
Lista de propiedades y mtodos: del objeto con el que se esta trabando.
Lista de constantes: que se pueden asignar al valor de una propiedad.
Informacin rpida: ayuda sobre la sintaxis del elemento que se esta escribiendo.
Informacin de parmetros: sintaxis de los parmetros de la funcin que se esta escribiendo.
Palabra completa: termina de escribir la palabra que se ha empezado.
Comentarios: Se indican poniendo un apstrofe delante del texto. Pueden estar al principio o en
medio de una lnea.
Constantes: Se indican con la palabra reservada Const delante del identificador. Opcionalmente se
puede escribir su tipo despus de As
Const PI As Double = 3,141592
Variables: Se definen con Dim. As indica el tipo
Dim Apellido As String
Los nombres de variables deben comenzar con una letra y pueden tener hasta 255 caracteres.
VBA dispone de los tipos de datos habituales (enteros, reales, bolanos, strings,..) y adems de toda
una serie de tipos de datos especficos llamados tipos de objetos que permiten definir variables para
contener elementos como entidades de dibujo, objetos grficos de formulario (cuadros de texto,
botones..), objetos HTML, OLE, etc. La estructura de objetos de VBA se muestran en la figura 3
Prctica 9
Pg: 3
Universitat Jaume I
2. EJERCICIO DE INTRODUCCIN
Extrado del Manual del desarrollador de ActiveX y VBA Captulo 1
Una vez introducidos los conceptos bsicos de la programacin en AutoCAD VBA, podemos intentar
crear un sencillo ejemplo de "Hola a todos". En este ejercicio crear un dibujo de AutoCAD, le aadir
una lnea de texto y lo guardar, todo ello desde VBA.
1. Abre el IDE de VBA desde la lnea de comando de AutoCAD:
Comando:VBAIDE
o pulsando Alt+F11
2. Abre la ventana de cdigo seleccionando la opcin Cdigo de del men Ver en el IDEVBA.
3. Para crear un procedimiento nuevo en el proyecto, elige la opcin Procedimiento en el men
Insertar en el IDE de VBA.
4. Cuando se solicite informacin del procedimiento, escribe un nombre, por ejemplo,
Hola_a_todos. Asegrate de que el tipo seleccionado sea Procedimiento y el mbito Pblico.
5. Elige Aceptar.
6. Escribe el cdigo siguiente (que abre un dibujo nuevo) entre las lneas Public Sub
Hola_a_todos() y End Sub.
ThisDrawing.Application.Documents.Add
7. Escribe el cdigo siguiente (que crea la cadena de texto y define el punto donde se inserta)
inmediatamente despus del cdigo introducido en el paso 6.
Dim insPoint(0 To 2) As Double 'Declare insertion point
Dim textHeight As Double
'Declare text height
Dim textStr As String
'Declare text string
Dim textObj As AcadText
'Declare text object
insPoint(0) = 2 'Set insertion point x coordinate
insPoint(1) = 4
'Set insertion point y coordinate
insPoint(2) = 0
'Set insertion point z coordinate
textHeight = 1
'Set text height to 1.0
textStr = "Hello World!"
'Set the text string
'Create Text object
Set textObj = ThisDrawing.ModelSpace.AddText (textStr, insPoint, textHeight)
8. Escribe el cdigo que guarda el dibujo despus del cdigo introducido en el paso 6.
ThisDrawing.SaveAs("Hello.dwg")
9. Para ejecutarlo elige la opcin Ejecutar Sub/UserForm en el men Ejecutar del IDE de VBA.
Cuando termine la ejecucin del programa, pon la aplicacin de AutoCAD en primer plano. Ahora
podrs ver el texto 'Hola a todos' en el dibujo. Se habr creado un nuevo dibujo cuyo nombre
debe ser Hello.dwg.
VBAIDE: Abre el IDE de VBA. Permite editar, ejecutar y depurar programas de forma interactiva.
Aunque slo se llama al IDE de VBA mientras se ejecuta AutoCAD, es posible minimizarlo, abrirlo
y cerrarlo con independencia de la ventana de aplicacin de AutoCAD.
VBACARGAR: Carga un proyecto VBA en la sesin actual de AutoCAD.
VBAEJECUTAR: Ejecuta una macro de VBA desde el cuadro de dilogo Macros o desde la lnea
de comando de AutoCAD.
VBADESCARGAR: Descarga un proyecto VBA de la sesin actual de AutoCAD. Si el proyecto
VBA est modificado, pero no se ha guardado, se pregunta al usuario si desea guardarlo en el
cuadro de dilogo Guardar proyecto (o el equivalente de la lnea de comando).
VBADMIN: Muestra el Administrador de VBA, donde puede ver, crear, cargar, cerrar, incrustar y
extraer proyectos.
VBAENUN: Ejecuta una declaracin de VBA desde la lnea de comando de AutoCAD.
Prctica 9
Pg: 4
Universitat Jaume I
5. UTILIZACIN DE EVENTOS
Los eventos son notificaciones o mensajes que AutoCAD enva para informarle del estado actual de
la sesin o para alertarle de que ha sucedido algo. Por ejemplo, al abrir un dibujo se activa el evento
BeginOpen. Este evento contiene el nombre del dibujo de AutoCAD que se ha abierto. Cuando se
cierra un dibujo se activa otro evento. Con esta informacin, podra escribir una subrutina o
controlador de eventos que utilice los eventos para realizar el seguimiento del tiempo que un usuario
trabaja en un dibujo determinado.
En el captulo 7 del Manual del desarrollador de ActiveX y VBA se amplia la informacin sobre:
Descripcin de los eventos de AutoCAD
Directrices para escribir controladores de eventos
Control de eventos de aplicacin
Control de eventos de documento
Control de eventos de objeto
Prctica 9
Pg: 5
Universitat Jaume I
Prctica 9
Pg: 6
Universitat Jaume I
Prctica 9
Pg: 7
Universitat Jaume I
Prctica 9
Pg: 8
Universitat Jaume I
Prctica 9
Pg: 9
Universitat Jaume I
Prctica 9
Pg: 10
Universitat Jaume I
La subrutina drow localiza la posicin de la primera fila utilizando el mtodo PolarPoint para
desplazarse por el camino la distancia indicada en el primer argumento. A continuacin, vuelve a
emplear PolarPoint para desplazarse en sentido perpendicular al camino a fin de obtener el desfase. A
continuacin, la subrutina utiliza la instruccin While para continuar dibujando crculos hasta llegar al
borde del camino. El mtodo PolarPoint de la primera instruccin While pasa a la posicin de la
siguiente baldosa, avanzando la distancia correspondiente al radio de dos baldosas (trad) y un
intervalo entre baldosas (tspac). A continuacin, un segundo bucle while dibuja las baldosas de la fila
de la otra direccin hasta que encuentra el otro extremo del camino.
La subrutina drawtiles llama repetidamente a drow para dibujar todas las filas de baldosas. La
subrutina del bucle While avanza por el camino, llamando a drow para cada fila. Las baldosas de las
filas adyacentes forman tringulos equilteros, como se muestra en la figura anterior. Los lados de los
tringulos son iguales a dos veces el radio de la baldosa ms el intervalo entre ellas. Por tanto, segn
la trigonometra, la distancia entre las filas del camino es el seno de 60 grados multiplicado por esta
cantidad, y el desfase de las filas impares es el coseno de 60 grados multiplicado por esta cantidad.
La instruccin If se emplea en drawtiles para desfasar filas alternas. En este caso, si el desfase es
igual a cero, defnalo como el intervalo entre los centros de las baldosas multiplicado por el coseno de
60, tal como se ha explicado anteriormente. Si no es igual a cero, defnalo en 0. Esto alterna el
desfase de las filas de la forma deseada. Guarde el archivo.
Creacin de una subrutina ejecutable gardenpath
En VBA, escriba el cdigo siguiente en la ventana Cdigo, despus de la subrutina drawtiles:
' Execute command, calling constituent functions
Sub gardenpath()
Dim sblip As Variant
Dim scmde As Variant
gpuser
sblip = ThisDrawing.GetVariable("blipmode")
scmde = ThisDrawing.GetVariable("cmdecho")
ThisDrawing.SetVariable "blipmode", 0
ThisDrawing.SetVariable "cmdecho", 0
drawout
drawtiles
ThisDrawing.SetVariable "blipmode", sblip
ThisDrawing.SetVariable "cmdecho", scmde
End Sub
La subrutina path llama a gpuser para obtener los datos necesarios. A continuacin se utiliza el mtodo
GetVariable para obtener los valores actuales de las variables de sistema BLIPMODE y CMDECHO y
estos valores se guardan como sblip y scmde. Despus, la subrutina utiliza el mtodo SetVariable para
asignar el valor 0 a estas variables de sistema, desactivando as las marcas auxiliares y la
reproduccin de comandos. A continuacin se dibuja el camino por medio de las subrutinas drawout y
drawtiles. Por ltimo se utiliza el mtodo SetVariable para devolver a las variables de sistema sus
valores originales.
Puede observar que sta es la nica subrutina introducida que no empieza con la palabra clave
Private, que impide que se llame a la subrutina desde un mdulo distinto al actual. Dado que la
subrutina gardenpath debe estar a disposicin del usuario, se debe omitir la palabra clave Private.
Comprobacin del cdigo
Ahora ejecute la macro recorriendo el cdigo paso a paso. En el men Herr. de AutoCAD, elija Macro
Macros. En el cuadro de dilogo Macros, seleccione ThisDrawing.gardenpath y pulse el botn Entrar.
El entorno de desarrollo de VBA aparece en primer plano, con la primera lnea de la macro
gardenpath resaltada. Se trata de la lnea de cdigo que se va a ejecutar en primer lugar. Para
ejecutarla, pulse F8. La siguiente lnea de cdigo que se va a ejecutar es la subrutina gpuser. Para
pasar a la subrutina gpuser vuelva a pulsar F8.
Prctica 9
Pg: 11
Universitat Jaume I
Ahora se encuentra al principio de la rutina gpuser. Si pulsa de nuevo F8 resaltar el primer mtodo
GetPoint. Antes de ejecutar esta lnea, seleccione Ver Ventana Locales. Esta ventana aparecer en la
parte inferior del entorno de VBA. Mientras la macro se ejecuta, todas las variables locales y sus
valores se presentan en la ventana Locales.
Pulse ahora F8 para ejecutar el mtodo GetPoint. Observar que desaparece el texto resaltado y no
se presenta ms cdigo. Esto se debe a que el mtodo GetPoint est esperando a que el usuario
introduzca un punto en AutoCAD. Vuelva a la ventana de AutoCAD. Ver la solicitud establecida en la
llamada a GetPoint de la lnea de comando. Indique un punto.
El control vuelve a la macro. Regrese al entorno de desarrollo de VBA. Ahora ver que la lnea
siguiente a la llamada a GetPoint est resaltada. Siga recorriendo el cdigo, pulsando F8. Recuerde
volver a la ventana de AutoCAD cuando deba introducir informacin.
Ejecucin de la macro
No es necesario recorrer el cdigo paso a paso siempre que se ejecute la macro. Puede ejecutar la
macro desde la ventana Macros elija Ejecutar en vez de Entrar. Esto permite ver el transcurso de la
ejecucin tal y como se presentar ante el usuario. Ejecute la macro desde AutoCAD e introduzca los
siguientes valores:
Herramientas Macros Ejecutar: ThisDrawing.gardenpath
Punto inicial del camino: 2, 2
Punto final del camino: 9, 8
Mitad de la anchura del camino: 2
Radio de las baldosas: .2
Intervalo entre las baldosas: .1
En este ejemplo se debe dibujar un camino de jardn como se
muestra en la figura. Puede experimentar con la macro
gardenpath introduciendo los distintos valores por medio del
ratn y el teclado.
Prctica 9
Pg: 12
Universitat Jaume I
Prctica 9
Pg: 13
Universitat Jaume I
Para definir las propiedades de los controles de los cuadros de edicin de texto
1- En el formulario, seleccione el control TextBox1. En la ventana Propiedades, cambie las siguientes
propiedades de TextBox1:
(Name) = gp_trad
2- En el formulario, seleccione el control TextBox2. En la ventana Propiedades, cambie las siguientes
propiedades de TextBox2:
(Name) = gp_tspac
3- En el formulario, seleccione el control TextBox3. En la ventana Propiedades, cambie las siguientes
propiedades de TextBox3:
(Name) = gp_tsides
Para definir las propiedades de los botones de comando y de la ventana de formulario
1- En el formulario, seleccione el control CommandButton1. En la ventana Propiedades, cambie las
siguientes propiedades de CommandButton1:
(Name) = accept
Caption = Aceptar
ControlTipText = Accept the options
Accelerator = O
Default = True
2- En el formulario, seleccione el control CommandButton2. En la ventana Propiedades, cambie las
siguientes propiedades de CommandButton2:
(Name) = cancel
Caption = Cancel
ControlTipText = Cancel the operation
Accelerator = C
3- En la ventana del formulario, seleccione el objeto UserForm1
haciendo clic en el fondo del formulario, fuera de los controles. En
la ventana Propiedades, cambie la siguiente propiedad de
UserForm1:
(Name) = gpDialog
Caption = Garden Path
El formulario deber presentar este aspecto.
Prctica 9
Pg: 14
Universitat Jaume I
Prctica 9
Pg: 15
Universitat Jaume I
Prctica 9
Pg: 16
Universitat Jaume I
Prctica 9
Pg: 17
Universitat Jaume I
Los valores del radio y el espacio entre baldosas se obtienen de la misma forma, aunque son valores
dobles y no enteros, y se obtienen por medio de la funcin CDbl. Tambin se verifican estos valores
para comprobar que son positivos.
Despus de obtener y verificar los valores, la instruccin gpDialog.Hide oculta el formulario y
devuelve el control a la subrutina que lo abri.
Adicin de controladores de eventos para el botn Cancelar
Ahora, aada el siguiente controlador de eventos para el botn Cancelar:
Private Sub cancel_Click()
Unload Me
End
End Sub
Este sencillo controlador de eventos descarga el formulario y pone fin a la macro.
Lo nico que queda por hacer es aadir los valores iniciales del formulario. Existe un evento llamado
Initialize aplicable al formulario. Se ejecuta cuando se carga el formulario.
Adicin de controladores de eventos para la inicializacin del formulario:
Aada el siguiente controlador de eventos para la inicializacin del formulario:
Private Sub UserForm_Initialize()
gp_circ.Value = True
gp_trad.Text = ".2"
gp_tspac.Text = ".1"
gp_tsides.Text = "5"
gp_tsides.Enabled = False
ThisDrawing.tsides = 5
End Sub
Este cdigo establece los valores iniciales del formulario y de la variable tsides. El valor de tsides
debe ser un nmero positivo mayor de 3, incluso si el usuario selecciona un crculo. Para entender
esto, observe la subrutina DrawShape introducida anteriormente. En ella hay una variable llamada
points que se define a partir del nmero de lados del polgono. Se asigna memoria a esta variable
tanto si se solicita una forma poligonal como si no es as. Por tanto, es necesario definir un valor
vlido para tsides. El usuario puede modificarlo a voluntad durante la ejecucin de la macro.
Ahora puede ejecutar la macro.
Prctica 9
Pg: 18