Sei sulla pagina 1di 13

PROGRAMACION VBA PARA EXCEL

INTRODUCCION:

Si bien la grabadora de macros es muy til y genera un cdigo siempre correcto,


tiene dos desventajas:

1.
2.

genera mas cdigo que el necesario.


slo puede hacer macros con instrucciones secuenciales y sin nada de lgica,
o sea que no pueden tomar desiciones ante un evento.
Ambas desventajas se pueden solucionar con la programacin VBA que quiere
decir programacin visual basic para aplicaciones, lo lamento pero aqu no
tenemos mas remedio que aprender a programar y eso es lo que van a ir
aprendiendo con los tutorarles de este apartado.
VBA es una programacin que est ntimamente relacionada con los libros y las
hojas de clculo y para esto Excel cuenta con un editor de programacin donde se
pone el cdigo, a este se puede acceder, en Excel 2007, yendo a la pestaa
programador y luego a la seccin cdigo donde hacemos clic en Visual Basic

En Excel 2003 hay que ir al men desplegable herramientas y de ah la ruta


macros y Editor de Visual Basic

ambas formas nos lleva, luego de hacer doble clic en Hoja1por ejemplo, al editor

las macros que se escriban aqu, estaran relacionadas con la Hoja1.


Comencemos por lo mas simple y escribamos una macro que seleccione la celda
B5de la Hoja1 del libro VBAProject (Libro2)

donde podemos ver que el cdigo

se escribe entre "Sub" y "End Sub" y que el nombre

no tiene espacios y termina con "( )" . Para ejecutar este cdigo pulsamos en el
icono

o en la tecla F5 para que aparezca el panel Macros

donde puede verse el nombre de la macro que ya est seleccionada, luego pulsamos
en "ejecutar" y despues en el icono
a la pantalla con el resultado

, o seleccionando " Alta + F5 que nos lleva

que es la seleccin de la celda B5.


Otro cdigo muy simple es escribir un valor en una celda.
Escribamos el valor 2007 en la elda D8

y si lo queremos borrar

A estas alturas estamos en condiciones de explicar estos sencillos cdigos:


En la programacin VBA se trabaja con OBJETOS ( Hojas, celdas, Rangos, etc)
que como todo objeto, tiene propiedades, por ejemplo el objeto celda pude tener
la propiedad de alto, ancho, estar seleccionada, tener un valor, o no tener ninguno,
etc
En los cdigos que hemos escrito tenemos los objetos Range("B5") ( celda B5) con
la propiedad de estar seleccionada y el objeto Range("D8") ( celda D8) con la
propiedad de tener un nmero (2007) y despues estar vaca.
CODIGOS MAS SIMPLES PARA EMPEZAR
1-Seleccionar una Celda

Range("A1").Select
2-Escribir en la celda que est seleccionada en el momento actual

Activecell.FormulaR1C1="Pedro"
la combinacin los cdigos 1 y 2 es equivalente a esta sola lnea:
Range("A1").Value=" pedro"
El uso de FormulaR1C1 sera explicado mas adelante
3-Letra Negrita

Selection.Font.Bold = True
4-Letra Cursiva

Selection.Font.Italic = True
5-Letra Subrayada

Selection.Font.Underline = xlUnderlineStyleSingle
6-Centrar Texto

With Selection
.HorizontalAlignment = xlCenter
End With
7-Alinear a la izquierda

With Selection
.HorizontalAlignment = xlLeft
End With
8-Alinear a la Derecha

With Selection
.HorizontalAlignment = xlRight
End With
9-Tipo de Letra(Fuente)

With Selection

.Font .Name = "Arial"


End With
10-Tamao de Letra(Tamao de Fuente)

With Selection.Font .Size = 12


End With
11-Copiar

Selection.Copy
12-Pegar

ActiveSheet.Paste
13-Cortar

Selection.Cut
14-Ordenar Ascendente

Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _


OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
15-Orden Descendente

Selection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess, _


OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
16-Buscar

Cells.Find(What:="Csar", After:=ActiveCell, LookIn:=xlFormulas,


LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _ False).Activate
17-Insertar Fila

Selection.EntireRow.Insert
18-Eliminar Fila

Selection.EntireRow.Delete
19-Insertar Columna

Selection.EntireColumn.Insert
20-Eliminar Columna

Selection.EntireColumn.Delete
21-Abrir un Libro

Workbooks.Open Filename:="C:\Mis documentos\Tablas dinamicas.xls"


22-Grabar un Libro

ActiveWorkbook.SaveAs Filename:="C:\Mis documentos\tablas.xls", FileFormat


_ :=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=
_ False, CreateBackup:=False
La mayoria de estos cdigos se pueden verificar con la grabadora de Macros.

Significado de la FORMULA R1C1


La FORMULA R1C1 se emplea para colocar el resultado de una lnea de cdigo en
la celda que actualmente est activa.
Veamos el siguiente caso

supongamos que queremos sumar los nmeros de de la columna D y que el


resultado aparezca en la celda F6 que es la que est seleccionada, el cdigo que se
debera escribir es el siguiente

El parntesis destacado en rojo tiene por objetivo cubrir el tango donde estn los
nmeros a sumar, o sea, desplazarme 2 columnas a la izquierda [-2] con 5 y 2 filas
hacia arriba es decir

[-5] y [-2]. Se entiende que R significan filas y C columnas y que anteponemos un si nos desplazamos hacia la izquierda o hacia arriba. Cuando escribimos una
funcin, como en el caso anterior, siempre debe ser escrita
ActiveCell.FormulaR1C1 = "=SUM(R[]C[]:R[]C[])", pues el segundo igual es que
caracteriza a la funcin y el parntesis el rango donde se aplica. Lo que se acaba de
hacer es lo mismo que dolocar =SUMA(D1:D3) en la celda F6
Hasta ahora hemos hecho una breve intrcduccion a la programacion VBA , pero
una cosa fundamental es entender las estructuras de control de flujo de programa,
lo que haremos mediante ejemplos

Estructuras de iteracion
Frecuentemente algunas lneas de cdigo de repiten muchas veces con el
consiguiente aumento del tamao del programa. Esto se solucionado mediante los
llamados estructuras de iteracin, tambin llamadas ciclos de repeticin o bucles.
Estos son:
While - Wend

Do - While - Loop
Do - Until --Loop
For - Next

Estructuras de desicion:
.If - Then - Else
Select - Case

Trucos mas usados


Manejo de Archivos de Excel desde VB
'Apertura de un archivo ya existente de excel
Dim Excel As Object
'Se crea el objeto que contiene la aplicacin de Excel
Set Excel = CreateObject("excel.Application" )
'Se abre el archivo existente

Excel.Workbooks.Open ("Direccion_del_Archivo" )
'Se activa la hoja para poder modificarla
Set Hoja = Excel.Sheets("Nombre_de_la_Hoja" )
'Cabe mencionar que al activar la Hoja solo se pueden modificar las
celdas de esa hoja
'para modificar las celdas de otra Hoja hay que repetir la instruccin
pero con el
'nombre de la hoja que se va a modificar.
'Se hace visible la ventana de Excel
Excel.Visible = True
'Esta instruccin puede ir en cualquier lugar del cdigo

'En caso de que se quiera crear un archivo nuevo se hace de la


siguiente manera:
Dim Excel As Object
'Se crea el objeto que contiene la aplicacin de Excel
Set Excel = CreateObject("excel.Application" )
'Se Crea el Libro de Trabajo
Excel.Workbooks.Add
'Se hace visible la ventana de Excel
Excel.Visible = True

'Asignacin de texto y formato para celdas


'Esta instruccin sirve para combinar celdas
Hoja.Range("A1", "D45" ).Merge
'Letra en negrita
Hoja.Range("A1" ).Font.Bold = True
'Color de la fuente

Hoja.Range("B2" ).Font.Color = RGB(255, 100, 0)


'Tamao de la fuente
Hoja.Range("A1" ).Rows(1).Font.Size = 12
'Tipo de fuente que se usar
Hoja.Range("B2" ).Rows(1).Font.Name = "Comic Sans MS"
'Texto de la celda
Hoja.Range("A1" ).Cells(1, 1) = "Texto"
'Cambiar color de relleno de la celda
Hoja.Range("A1" ).Interior.Color = RGB(215, 215, 215)
'Cambiar ancho de una columna
Hoja.Columns("A" ).ColumnWidth = 12 'en la parte de Columns va la
letra de la columna
'Cambiar altura de una fila
Hoja.Rows("1" ).RowHeight = 50 'en la parte de rows va el numero de
la fila

'Bordes de celdas
Hoja.Range("A1" ).Borders(xlTop).LineStyle = xlContinuous
Hoja.Range("A1" ).Borders(xlBottom).LineStyle = xlContinuous
Hoja.Range("A1" ).Borders(xlRigth).LineStyle = xlContinuous
Hoja.Range("A1" ).Borders(xlLeft).LineStyle = xlContinuous
'xlContinuous se puede cambiar por xlDouble, xlThick

'Si no se quiere hacer ningn cambio al tipo de fuente por defecto se


deja as
Hoja.Range("A1" ).Cells(1, 1) = "Hola"

'Borrar una hoja del libro de Excel se hace de la siguiente manera

Set Hoja = Excel.Sheets("Sheet2" )


Hoja.Delete
'Para cambiar el nombre de la hoja
Set Hoja = Excel.Sheets("Sheet1" )
Hoja.Name = "Hola"

'Forma de ejecutar frmulas de Excel


'En este caso se ponen las celdas o rango de celdas igual que como
se hara
'en Excel puede ser sin el signo igual "=" o sin l.
Excel.Application.EVALUATE("SUM(A1:C1)" )
'no se si sirve para todas las frmulas pero las que he usado si
funcionan

'Obtener el valor de una celda en especfico


'Obtener una cadena de Texto
Hoja.Range("A1" ).Text)
'Obtener el valor numrico
Hoja.Range("A4" ).Value)

'Guardar el archivo modificado


Hoja.SaveAs ("direccin_junto_con_nombre_de_archivo" )
'Ejemplo Hoja.SaveAs ("C:\ejemplo.xls" )
'Para cerrar la aplicacin
Excel.Workbooks.Close

'Se limpian las variables de tipo objeto


Set Excel = Nothing

Set Hoja = Nothing

Tipos de Datos en VBA


Existen 12 tipos de datos diferentes con los que se puede trabajar. Por ejemplo al
declarar una variable en VBA basta aadir una lnea de cdigo para definir la naturaleza
de los valores que almacenaremos en ella.
Dim Numero As Integer
Numero = 5
Tambin es posible asignarle a la variable el valor directamente y sin especificar el tipo
de dato, sin embargo existen dos inconvenientes en trabajar de esta forma. Cuando no
declaramos el tipo de dato los valores se pasan en formato Variant, que es un tipo
flexible pero a que a la vez consume mucha memoria. Otro problema de pasar datos
como Variant es que se deja abierta la posibilidad de que ocurran errores ms adelante
en el programa.
Boolean: El Boolean tiene slo dos estados, Verdadero y Falso. Estas variables se
utilizan generalmente como flags o condicionales.
Byte: El Byte corresponde a una variable de 8 bits que puede almacenar valores de 0 a
255. Es muy til para el almacenamiento de datos binarios.
Double: El Double es un nmero de 64-bit de coma flotante que se utiliza cuando se
necesita una gran precisin. Estas variables pueden variar desde1.79769313486232E308 a -4,94065645841247E-324 para valores negativos y de
4,94065645841247E-324 a 1.79769313486232E308 para valores positivos.
Integer: El Integer o entero es un nmero de 16 bits que puede oscilar entre -32768 y
32767. Los enteros se deben utilizar cuando se trabaja con valores que no pueden
contener nmeros fraccionarios.
Long: El Long es un nmero de 32 bits que puede variar entre -2.147.483.648 y
2.147.483.647. Las variables Long slo puede contener valores enteros.
Decimal: El Decimal es un subtipo de dato Variant, puede almacenar valores en un
rango que va desde -79.228.162.514.264.337.593.543.950.335 hasta
79.228.162.514.264.337.593.543.950.335 si el valor no contiene cifras decimales. Tiene
una precisin de hasta 28 decimales con valores desde
-7,9228162514264337593543950335 hasta 7,9228162514264337593543950335.
Single: El Single es un nmero de 32 bits que va desde-3.402823E38 a -1,401298 E-45
para valores negativos y desde 1,401298E-45 a 3.402823E38 para valores positivos.
Cuando se necesitan nmeros fraccionarios dentro de este rango, este es el tipo de
apropiado para su uso.

String: El String se utiliza generalmente como un tipo de longitud para una cadena de
texto. Una cadena de longitud variable puede contener un mximo de aproximadamente
2 mil millones de caracteres. Cada carcter tiene un valor que va desde 0 hasta 255
basado en el juego de caracteres ASCII.
Currency: El tipo de datos Moneda es en realidad un tipo entero internamente. En su
uso, se escala por un factor de 10.000 para agregar cuatro dgitos a la derecha del punto
decimal. Permite hasta 15 dgitos a la izquierda del punto decimal, resultando en un
rango de aproximadamente -922.337.000.000.000 a +922.337.000.000.000.
Date: El Date almacena un valor numrico con formato especial que representa tanto la
fecha como la hora. El Date acepta la fecha o la hora, o ambas cosas. Los valores
posibles van desde 1 de enero del ao 100 a 31 de diciembre del ao 9999.
Object: El Object puede sealar a cualquier tipo de dato, incluso cualquier instancia de
objeto que la aplicacin reconozca. Se utiliza Object cuando en el tiempo de
compilacin no se conoce a qu tipo de datos puede sealar la variable.
Independientemente del tipo de datos al que haga referencia, una variable Object no
contiene el valor en s, sino un puntero al valor. Debido al cdigo que el puntero utiliza
para buscar los datos, las variables Object son de acceso un poco ms lento que las
variables que tienen un tipo explcito.
Variant: Los Variant almacenan valores numricos y no numricos. Son los ms
flexible de todos los tipos disponibles, ya que almacena valores muy grandes de casi
cualquier tipo (coincide con el tipo de datos numrico doble). Se usa slo cuando no se
est seguro del tipo o cuando se estn acomodando datos externos y no se est seguro de
las especificaciones del tipo de datos.

Potrebbero piacerti anche