Programacion Vba Para Excel senati

15
PROGRAMACION VBA PARA EXCEL INTRODUCCION: Si bien la grabadora de macros es muy útil y genera un código siempre correcto, tiene dos desventajas: 1. genera mas código que el necesario. 2. sólo puede hacer macros con instrucciones secuenciales y sin nada de lógica, o sea que no pueden tomar desiciones ante un evento. Ambas desventajas se pueden solucionar con la programación VBA que quiere decir programación 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 programación que está íntimamente relacionada con los libros y las hojas de cálculo y para esto Excel cuenta con un editor de programación donde se pone el código, a este se puede acceder, en Excel 2007, yendo a la pestaña programador y luego a la sección código 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

description

curso de programacion de macros con excel

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.