Programacion Vba Para Excel senati
-
Upload
gonzalo-ap -
Category
Documents
-
view
33 -
download
18
description
Transcript of Programacion Vba Para Excel senati
PROGRAMACION VBA PARA EXCEL
INTRODUCCION:
Si bien la grabadora de macros es muy til y genera un cdigo siempre correcto, tiene dos desventajas:
1. genera mas cdigo que el necesario.
2. 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 , o seleccionando " Alta + F5 que nos lleva a la pantalla con el resultado
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 = 12End 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 grabadorade 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 - WendDo - While - LoopDo - Until --LoopFor - NextEstructuras de desicion:
.If - Then - Else Select - CaseTrucos mas usadosManejo 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 IntegerNumero = 5Tambin 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 desde-1.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.