Está en la página 1de 11

PROGRAMACION EN VISUAL BASIC Y EN VISUAL BASIC PARA APLICACIONES

Objetos, propiedades y métodos.

A la hora de trabajar con Visual Basic, deben tenerse claros ciertos conceptos de lo
que se llama programación orientada a objetos (OOP). No nos extenderemos
demasiado sobre la OOP, pero si definiremos los conceptos de Objeto, Propiedades
y Métodos.

PROGRAMACION EN VISUAL BASIC PARA APLICACIONES (VBA)

- Objetos. 
Un objeto es una entidad que tiene asociado un conjunto de métodos, eventos y
propiedades. Cualquier objeto está definido por una clase. Ejemplo: Una caja de
texto (TextBox) en la cual podemos escribir cualquier línea es un objeto.

-
Propiedades. 
Son las características que posee un objeto o un formulario (ventana de Windows).
Ejemplo: Color de fondo del formulario, Fuente de texto de un TextBox, ….

- Métodos. 
Los métodos son funciones internas de un determinado objeto que permite realizar
funciones sobre él o sobre otro objeto

- Eventos.
Los eventos son acciones que se pueden realizar en cualquier control: clic, doble clic,
movimiento del ratón. A estos eventos se les puede asociar código para que se
ejecute al producir el evento.
Todo lo que hacemos en un programa Visual Basic está generado por medio de
eventos

Repasemos a continuación todos estos conceptos, pero ahora desde el punto de vista
de algunos de los objetos que nos encontraremos en Excel como WorkSheet (Objeto
hoja de cálculo) o Range (Objeto casilla o rango de casillas).
 
Un objeto Range está definido por una clase donde se definen sus propiedades,
recordemos que una propiedad es una característica, modificable o no, de un objeto.
Entre las propiedades de un objeto Range están Value, que contiene el valor de la
casilla, Column y Row que contienen respectivamente la fila y la columna de la
casilla, Font que contiene la fuente de los caracteres que muestra la casilla, etc. 

Range,
Range, como objeto, también tiene métodos, recordemos que los métodos sirven
llevar a cabo una acción sobre un objeto. Por ejemplo, el método Activate
Activate, hace activa
una celda determinada, Clear
Clea r , borra el contenido de una celda o rango de celdas,
Copy,
Copy, copia el contenido de la celda o rango de celdas en el portapapeles.

- Conjuntos.
Un conjunto es una colección de objetos del mismo tipo, para los que conozcan algún
lenguaje de programación es un array de objetos. Por ejemplo, dentro de un libro de
trabajo puede existir más de una hoja (WorkSheet), todas las hojas de un libro de
trabajo forman un conjunto, el conjunto WorkSheets.
Cada elemento individual de un conjunto se referencia por un índice, de esta forma, la
primera, segunda y tercera hoja de un libro de trabajo, se referenciarán por
WorkSheets(1), WorkSheets(2) y WorkSheets(3).

- Objetos de Objetos.
 
Es muy habitual que una propiedad de un objeto sea otro objeto.
En Excel, el objeto WorkSheets tiene la propiedad Range que es un objeto, Range
tiene la propiedad Font que es también un objeto y Font tiene la propiedad Bold
(negrita). Dicho de otra forma, hay propiedades que devuelven objetos, por ejemplo, la
propiedad Range de un objeto WorkSheet devuelve un objeto de tipo Range.

Programación Orientada a Objetos o Programación Basada en Objetos.


 

Hay una sutil diferencia entre las definiciones del título. Programación orientada a
Objetos, significa que el programador trabaja con objetos fabricados por él mismo, es
decir, el programador es quien implementa las clases para luego crear objetos a partir
de ellas. Lo que haremos nosotros, por el momento, será utilizar objetos ya definidos
por la aplicación Excel (WorkSheets, Range,...) sin implementar ninguno de nuevo, por
lo que en nuestro caso es más correcto hablar de programación basada en objetos.
Observe que esta es una de las grandes ventajas de la OOP, utilizar objetos definidos
por alguien sin tener que conocer nada sobre su implementación, sólo debemos
conocer sus propiedades y métodos y utilizarlos de forma correcta.

Programación con Visual Basic

Con Visual Basic podemos crear cualquier tipo de aplicación para que funcione bajo
Windows, utilizando así todos y cada uno de los elementos que forman parte de éste.
Si estamos familiarizados con Windows conoceremos de sobra estos elementos y qué
es lo que solemos hacer con cada uno de ellos.

Visual Basic y VBA

VBA (Visual Basic for Applications) Es una herramienta menos avanzada que VB y
diseñada para ser implementada en las distintas aplicaciones Windows y poder
desarrollar programas para ellas. Incluye importantes implementaciones para macros y
guiones, la sintaxis de programación Visual Basic casi completa un depurador y un
entorno de desarrollo integrado.
En general la estructura de menús y barra de herramientas es muy parecida, si bien
existen ausencias en VBA con respecto a Visual Basic, como por ejemplo la capacidad
de compilar proyectos o de abrir proyectos, entre otras.

La plantilla de objetos de AutoCAD

Los objetos que proporciona AutoCAD para su manejo desde programas VBA están
divididos según una jerarquía que deberemos seguir a la hora de llamarlos o referirnos
a ellos. La plantilla que se muestra a continuación nos será muy útil a la hora de
programar, ya que establece dicha jerarquía.

En Visual Basic es factible añadir al entorno nuevos objetos creados por nosotros para
luego ser utilizados. Lo que se ha hecho en VBA es precisamente eso. Estos objetos
tienen sus propiedades y métodos, al igual que los demás. Existen objetos de
entidades individuales de dibujo (líneas, círculos, arcos...) con sus propiedades (color,
capa, tipo de línea...) y métodos (copiar, mover, escalar).

También se han definido otros objetos no gráficos como son el Espacio Modelo, el
Espacio Papel y los bloques. Estos se consideran una colección de objetos de
entidades individuales de dibujo y tienen también sus propiedades para, por ejemplo,
saber cuántas entidades simples contienen, y sus métodos para, por ejemplo, añadir
nuevas entidades a la colección.

El propio documento actual de AutoCAD está definido como un objeto y tiene sus
propiedades (camino de acceso, límites...) y métodos (guardar, regenerar...). Dentro
de él se encuentran los mencionados anteriormente, además de otras colecciones
como el conjunto de capas, de estilos de texto, etcétera, cada una con propiedades y
métodos.

Y todo ello está incluido en el objeto más exterior, que es la aplicación de AutoCAD.
INTERACCION ENTRE DISTINTAS APLICACIONES DE WINDOWS EMPLEANDO
VISUAL BASIC

Empleando Visual Basic es posible interactuar con diversas aplicaciones de Windows.


Mediante un ejemplo explicaremos el empleo de esta utilidad, y las diferencias entre la
programación desde Visual Basic y la programación desde el módulo de Visual Basic
de una aplicación. Para ello desarrollaremos una aplicación ilustrativa en la que se va
a interactuar entre AutoCAD, Excel y Word.

Incluir Referencias a Aplicaciones de Windows

Para abrir cualquier aplicación de Windows desde Visual Basic o desde un módulo de
VB de algún programa, es necesario incluir en las referencias de nuestro proyecto las
librerías correspondientes, para tener a disposición los objetos de la aplicación con la
que deseamos interactuar.

Esto se realiza al entrar en el menú Proyecto/Referencias dentro de VB o en


Herramientas/Referencias dentro de VBA, y dentro de la lista que muestra la caja de
diálogo seleccionar la librería correspondiente a la aplicación con la que queremos
trabajar. En la figura siguiente se muestra cómo se incluye dentro de un proyecto de
VBA, la referencia a los objetos de Microsoft Word.

Objetos predeterminados en Visual Basic para Aplicaciones

Por defecto, al abrir el editor de Visual Basic de una aplicación, existe ya definido un
objeto, que por lo general se refiere al documento actual de cada aplicación. Este
objeto es la entrada por defecto que aparece en el Explorador de proyectos. A
continuación, se describen estos objetos para cada una de las aplicaciones que nos
interesan.
Aplicación Objeto Descripción
AutoCAD ThisDrawing Se refiere al documento actual activo de AutoCAD.
Word ThisDocument Se refiere al documento actual activo de Word
Excel ThisWorkBook Se refiere al libro activo de Excel

Abrir una aplicación de Windows

Para abrir una aplicación de Windows desde VB o desde VBA de algún programa es
necesario agregar la referencia a la librería de dicha aplicación, como se explicó
anteriormente. El código requerido para hacerlo se muestra a continuación.

‘ Declarar las variables


Dim acadApp As AcadApplication
Dim wordApp As Word.Application
Dim excelApp As Excel.Application

‘ Crear los nuevos objetos


Set acadApp = New AcadApplication
Set wordApp = New Word.Application
Set excelApp=New Excel.Application

‘Hacer visible la aplicación


acadApp.Visible = True
wordApp.Visible = True
excelApp.Visible=True

Con estas pocas líneas es posible abrir AutoCAD, Word y Excel. Si la propiedad
Visible de cada uno de los objetos Application se coloca en False, la aplicación correrá
en Windows, y se podrá realizar operaciones con ella, pero, no va a estar visible para
el usuario en el computador.

Agregar un documento

Para adicionar un documento nuevo a la aplicación, en el caso de Word y AutoCAD,


basta con adicionar un nuevo elemento al conjunto de Objetos Documents que
corresponde al Conjunto de todos los objetos Document actualmente abiertos.

‘Adicionar un nuevo objeto Document al conjunto Documents


acadApp.Documents.Add
wordApp.Documents.Add

En el caso de Excel se trabaja con la colección de libros de la aplicación abierta


actualmente. El objeto Wordkbooks se refiere a la colección de libros de la aplicación,
el objeto Workboook se refiere a un libro de Excel, y el método que se emplea para
adicionar un nuevo libro es el método Add como se muestra en el siguiente fragmento
de codigo.

‘Adicionar un nuevo objeto Workbook al conjunto Workbooks


excelApp.Workbooks.Add
Dibujar Líneas en AutoCAD

Una vez ya hemos abierto una nueva aplicación de AutoCAD, podemos empezar a
interactuar con ella. Para dar un ejemplo de lo que se puede desarrollar vamos a
dibujar una línea desde VB.

La sintaxis del método AddLine para dibujar líneas es la que sigue:

Set ObjLinea = ObjColección.AddLine(DblPtoInicial, DblPtoFinal)

Los objetos gráficos de dibujo hemos de declararlos previamente como tales. Para ello
deberemos definir un nombre de variable que almacenará el objeto; es a lo que se
refiere ObjLinea. Esta variable puede ser declarada como Object simplemente o como
un objeto especial de VBA para AutoCAD que representa el tipo de objeto que
almacenará. Este objeto especial tiene diferentes nombres según el objeto que
almacene; su sintaxis podría definirse así: AcadObjeto, es decir, primero la cadena fija
Acad y luego el nombre del objeto.

ObjColección se refiere a la colección donde se almacenará la línea, es decir, si se


dibujará en Espacio Modelo o Espacio Papel, o si formará parte de un bloque. Los
puntos inicial y final de la línea (DblPtoInicial y DblPtoFinal) deben ser agrupaciones
de tres coordenadas (X, Y, y Z), por lo tanto, han de definirse como matrices (arrays o
tablas) de tres elementos, cada uno de ellos de tipo Double, generalmente.

‘Declarar la variable de objeto Línea

Dim ObjLinea As AcadLine

‘Declarar los arreglos donde se almacenan las coordenadas de los puntos

Dim PuntoInicial (1 To 3) As Double


Dim PuntoFinal (1 To 3) As Double

‘Inicializar los arreglos

PuntoInicial(1) = 100: PuntoInicial(2) = 100: PuntoInicial(3) = 0


PuntoFinal(1) = 200: PuntoFinal(2) = 200: PuntoFinal(3) = 0

‘Inicializar el objeto Línea

Set ObjLinea = acadApp.ActiveDocument.ModelSpace.AddLine(PuntoInicial, PuntoFinal)

Tenemos, ahora a disposición un objeto línea con el que podemos interactuar


cambiando sus propiedades o ejecutando sus métodos. En seguida se muestra la lista de
propiedades y de métodos que tiene disponible el objeto Línea

Métodos de los objetos de línea:


Propiedades de los objetos de línea:
ArrayPolar
Application ArrayRectangular
Color Copy
Erase
EndPoint GetBoundingBox
EntityName GetXData
EntityType Highlight
Handle IntersectWith
Layer Mirror
Linetype Mirror3D
LinetypeScale Move
Normal Offset
ObjectID Rotate
StartPoint Rotate3D
Thickness ScaleEntity
Visible SetXData
TransformBy
Update

Cambiar Propiedades de Objetos Gráficos

Así, por ejemplo, si tras trazar la línea del ejemplo anterior quisiéramos cambiarla
al color rojo, únicamente deberíamos añadir la siguiente línea al programa (tras Set
ObjLínea...):

‘Asignarle color rojo a la propiedad Color del objeto Línea

ObjLinea.Color = 1

Color es una propiedad de la línea, por lo que lo único que hacemos es cambiarle
el valor como a cualquier otra propiedad en Visual Basic: indicando el objeto,
seguido de un punto de separación, la propiedad, un signo de igual y el nuevo
valor. Así de simple. Algunas propiedades se tratan de otra forma.

Emplear métodos de los Objetos Gráficos

Si lo que deseamos es crear un arreglo rectangular con esta línea aplicamos el


método ArrayRectangular. Este método crea una matriz polar de dos o tres
dimensiones repitiendo el objeto al que se le aplica. Hay que indicar el número de
filas, columnas y niveles, así como las distancias correspondientes, de la siguiente
manera:

VarMatriz = ObjGráfico.ArrayRectangular(IntNúmFil, IntNumCol,


IntNumNiv, DblDistFil, DblDistCol, DblDistNiv)

Los números de filas, columnas y niveles serán enteros (Integer) y las distancias
lo más lógico es que sean de doble precisión (Double).

‘Declarar las variables requeridas

Dim filas As Integer

Dim columnas As Integer


Dim dFilas As Double

Dim dColumnas As Double

Dim arreglo As Variant

‘Inicializar los valores de las variables

Filas=8 : Columnas=3

Dfilas=110 : dcolumnas=50

‘Inicializar la variable arreglo

arreglo = objLinea.ArrayRectangular(filas, columnas, 1, dFilas, dColumnas, 0)

La variable arreglo debe declararse como una variable tipo Variant. Se nota que no se
requiere emplear la palabra Set debido a que arreglo no es una variable de Objeto sino
una variable tipo Variant.

Añadir Texto a un Documento de AutoCAD

El método AddMText permite añadir texto al dibujo. Hemos de indicar la cadena de


texto en cuestión (variable String), el punto de inserción en el SCU (matriz Double
de tres valores) y el ancho (Double). La sintaxis es pues la que sigue:

Set ObjTexto = ObjColección.AddText(DblPtoIns, DblAncho, StrTexto)

En el ejemplo que sigue adicionaremos un fragmento de texto al documento actual de


AutoCAD.

‘Declarar las variables requeridas

Dim textCoords(1 To 3) As Double


Dim text As String
Dim ancho As Double
Dim acadText As AcadMText

‘Inicializar los valores de las variables

textCoords (1) = 100: textCoords (2) = 70: textCoords (3) = 0


text=”Arreglo de líneas”
ancho=50

‘Inicializar el objeto AcadMText

Set acadText = acadApp.ActiveDocument.ModelSpace.AddMText(textCoords, ancho, text)

Establecer valores de Celdas de Excel

Para establecer valores de celdas individuales en una hoja de cálculo podemos usar la
colección Cells o la propiedad Range del objeto WorkSheet. El objeto WorkSheet se
refiere a una hoja de cálculo de Excel, si se quiere trabajar sobre la hoja activa se
puede consultar la propiedad ActiveSheet.

Si deseamos insertar en una hoja de cálculo de la aplicación de Excel que abrimos


inicialmente, el contenido de las coordenadas del punto inicial y final de la línea que
dibujamos lo podemos hacer como se muestra a continuación:

‘Establecer el valor del contenido de las celdas de Excel

With excelApp.ActiveSheet
.Cells(1,2).Value= PuntoInicial(1)
.Cells(1,3).Value= PuntoInicial(2)
.Cells(1,4).Value= PuntoInicial(3)

.Cells(2,1).Value=”Punto Final”
.Cells(2,2).Value= PuntoFinal (1)
.Cells(2,3).Value= PuntoFinal (2)
.Cells(2,4).Value= PuntoFinal (3)
End With

Empleando la palabra reservada With nos ahorramos escribir excelApp.ActiveSheet


cada vez que vamos a establecer el contenido de una celda.

Insertar Texto en Word

Si lo que deseamos es insertar en Word el mismo texto que insertamos en AutoCAD


podemos hacerlo empleando el objeto Selection del documento y el método
InsertAfter.

En el siguiente ejemplo adicionamos el texto y empleamos la propiedad Font para


colocarlo en negrita.

‘Adicionar texto al Documento


wordApp.ActiveDocument.ActiveWindow.Selection.InsertAfter (text)

‘Poner el texto seleccionado en negrita


wordApp.ActiveDocument.ActiveWindow.Selection.Font.Bold=True

Insertar en Word una imagen generada en AutoCAD

Para insertar una imagen en Word generada en AutoCAD hay que seguir dos pasos:
primero, exportar el archivo de imagen desde AutoCAD, y segundo importar la imagen
desde Word.

Para exportar un archivo de imagen desde AutoCAD es necesario tener un grupo de


selección que corresponde a las entidades que van a ser incluidas dentro del archivo
grafico. Este procedimiento se ilustra a continuación.

‘Declarar la variable Grupo de Selección


Dim sset As AcadSelectionSet

‘Adicionar el Nuevo Grupo de Selección al objeto de conjunto SelectionSets


Set sset = acadApp.ActiveDocument.SelectionSets.Add("set")
‘Adicionar a este grupo de Seleccion todas las entidades del dibujo actual
sset.Select acSelectionSetAll

Para exportar un archivo desde AutoCAD podemos hacer uso del método Export,
cuyos parámetros son: un String, que contiene la ruta y el nombre del archivo que
vamos a generar, la extensión del archivo a exportar (“BMP” para archivos gráficos), y
el Selection Set que contiene las entidades gráficas que van a ser incluidas dentro del
archivo gráfico generado. Este procedimiento se ilustra en el siguiente fragmento de
código:

‘Definir la ruta y el nombre del archivo a exportar


Dim file As String
file = "C:\WINDOWS\Escritorio\figura"

‘Exportar el archivo Grafico


acadApp.ActiveDocument.Export file, "BMP", sset

Ahora tenemos a disposición, y en una ruta conocida, el archivo gráfico que deseamos
insertar en Word. Para insertar la imagen hacemos uso del objeto de Shapes, que
incluye todas las formas del contenido principal de un documento o de todos los
encabezados y pies de página del mismo. Un objeto Shape, miembro del conjunto
Shapes, representa un objeto de la capa de dibujo, como una Autoforma, una forma
libre, un objeto OLE, un control ActiveX o una imagen.

Para insertar la imagen se hará uso del método AddPicture de Shapes. La sintaxis del
método se muestra a continuación:

expresión.AddPicture(FileName, LinkToFile, SaveWithDocument, Range)

FileName   String requerida. Archivo desde el que se creará el objeto. Si se omite


este argumento, se utilizará la carpeta actual.

LinkToFile   Variant opcional. True para vincular la imagen al archivo desde el que
fue creada. False para que la imagen sea una copia independiente del archivo. El
valor predeterminado es False.

SaveWithDocument   Variant opcional. True para guardar la imagen vinculada con el


documento. El valor predeterminado es False.

Así, el código requerido para insertar la imagen que exportamos desde AutoCAD será
el siguiente:

wordApp.ActiveDocument.Shapes.AddPicture "C:\WINDOWS\Escritorio\figura.bmp", True,


True

Acceder a la línea de Comandos de AutoCAD

Se han detectado problemas en los archivos gráficos exportados por AutoCAD 2000,
por lo tanto, vamos a indicar una forma alternativa de insertar una imagen de AutoCAD
en Word, al acceder a la línea de Comandos y hacer uso del PortaPapeles.
Un método muy útil es el método SendCommand con el que podemos tener acceso a la
línea de Comandos de AutoCAD y ejecutar cualquier instrucción que no deseemos o
no tengamos disponible en VB. El parámetro del método es un String que
corresponde a la lista de comandos que queremos ejecutar. Para nuestro ejemplo
vamos a ejecutar el comando CopyLink, con el que colocamos una imagen del dibujo
de AutoCAD en el PortaPapeles. En seguida se muestra el fragmento de código que
realiza esta operación:

‘Colocar la imagen del dibujo en el PortaPapeles


acadApp.ActiveDocument.SendCommand ("copylink ")

Insertar una Imagen en Word desde el PortaPapeles

Para insertar en un documento de Word el contenido del PortaPapeles, simplemente


hay que hacer uso del método Paste, como se muestra enseguida.

‘Insertar la imagen desde el PortaPapeles


wordApp.ActiveDocument.ActiveWindow.Selection.Paste

Diferencias entre VB y VBA

El código descrito anteriormente se puede usar en su totalidad en VB. En el caso en


el que la aplicación se haya desarrollado en el modulo de Visual Basic de alguna de
las aplicaciones el código que se debe incluir es un poco distinto. La diferencia
fundamental consiste en que no vamos a crear una nueva instancia de una aplicación
de Windows, sino que nos vamos a referir a un documento ya existente en la
aplicación en la que estamos trabajando, haciendo uso de los objetos predeterminados
de VBA, que describimos inicialmente. En la tabla se indica el objeto en VB que debe
ser reemplazado por un objeto de VBA.

Aplicación desarrollada en VBA Cambiar (Objeto en VB): Por (Objeto en VBA):


de
AutoCAD acadApp.ActiveDocument ThisDrawing
Word wordApp.ActiveDocument ThisDocument
Excel ExcelApp.ActiveWorkBook ThisWorkbook

Lo anterior fue un ejemplo sencillo de lo que se puede hacer para interactuar entre
aplicaciones empleando Visual Basic, no es un tutorial ni un curso de VBA, por lo cual
es necesario tener conocimientos previos de VB. Sin embargo, a partir de este
ejemplo se puede ver el potencial que ofrecen las herramientas desarrolladas por
Microsoft para crear nuevas aplicaciones empleando objetos y aplicaciones
desarrolladas anteriormente.

También podría gustarte