Excel Avanzado con VBA
16/02/2012
Por qu usar VBA en Excel 2010?
Microsoft Excel 2010 es una herramienta muy eficaz que se puede usar para manipular, analizar y presentar datos. A veces, no obstante, a pesar del amplio conjunto de caractersticas que ofrece la interfaz de usuario (UI) estndar de Excel, es posible que se desee encontrar una manera ms fcil de realizar una tarea repetitiva y comn, o de realizar alguna tarea no incluida en la interfaz de usuario. Afortunadamente, las aplicaciones de Office, como Excel, tienen Visual Basic para Aplicaciones (VBA), un lenguaje de programacin que brinda la posibilidad de ampliar dichas aplicaciones.
16/02/2012
Por qu usar VBA en Excel 2010?
VBA funciona mediante la ejecucin de macros , procedimientos paso a paso escritos en Visual Basic. Aprender a programar podra parecer intimidante, pero con algo de paciencia y algunos ejemplos, como los que se incluyen en este artculo, muchos usuarios encuentran que conocer aunque sea una pequea parte del cdigo de VBA facilita su trabajo y les brinda la posibilidad de ejecutar tareas en Office que antes crean imposibles de realizar. Si se adquieren algunos conocimientos sobre VBA, resultar mucho ms sencillo seguir aprendiendo, y las posibilidades de que hacer son ilimitadas.
16/02/2012
Por qu usar VBA en Excel 2010?
Sin duda, la razn ms frecuente por la cul se usa VBA en Excel es para automatizar tareas repetitivas. Por ejemplo, suponga que tiene docenas de libros con docenas de hojas de clculo y necesita realizar cambios en cada uno de ellos. Los cambios podran ser tan simples como aplicar formato nuevo a algn rango fijo de celdas, o bien tan complejos como buscar algunas caractersticas estadsticas de los datos en cada hoja, elegir el mejor tipo de grfico para mostrar datos con esas caractersticas y, a continuacin, crear y dar formato al grfico en consecuencia.
16/02/2012
Por qu usar VBA en Excel 2010?
VBA no es til solo para tareas repetitivas. Tambin puede usar VBA para crear nuevas funcionalidades en Excel (por ejemplo, puede desarrollar nuevos algoritmos para analizar datos y, a continuacin, usar las funcionalidades de grficos de Excel para mostrar los resultados) y realizar tareas que integren Excel con otras aplicaciones de Office, como Microsoft Access 2010. De hecho, de todas las aplicaciones de Office, Excel es la ms usada como algo similar a una plataforma de desarrollo general. Adems de todas las tareas obvias que implican listas y contabilidad, los programadores usan Excel en una amplia variedad de tareas, desde visualizacin de datos hasta prototipos de software.
16/02/2012
Uso de cdigo para hacer que las aplicaciones realicen las tareas
Quiz crea que escribir cdigo es algo misterioso o complicado, pero sus principios bsicos usan la lgica diaria y son bastante accesibles. Las aplicaciones de Office 2010 estn creadas de tal modo que exponen lo que se denomina objetos. Estos objetos reciben instrucciones. Para interactuar con las aplicaciones, se envan instrucciones a varios objetos de la aplicacin. Los objetos, si bien son variados y flexibles, tienen sus lmites. Solo pueden hacer aquello para lo que fueron diseados y solo harn lo que se les indique que hagan.
16/02/2012
Objetos
Los objetos de programacin se relacionan entre s sistemticamente en una jerarqua denominada modelo de objetos de la aplicacin. El modelo de objetos bsicamente refleja lo que se ve en la interfaz de usuario. Por ejemplo, el modelo de objetos de Excel contiene los objetos Application, Workbook, Sheet y Chart, entre muchos otros. El modelo de objetos constituye el mapa conceptual de la aplicacin y sus funcionalidades.
16/02/2012
Propiedades y mtodos
Es posible manipular objetos al establecer sus Propiedades y llamar a sus mtodos. Si se establece una propiedad, se producen algunos cambios en la calidad del objeto. Si se llama a un mtodo, se logra que el objeto realice una determinada accin. Por ejemplo, el objeto Workbook tiene un mtodo Close que cierra el libro y una propiedad ActiveSheet que representa la hoja activa del libro.
16/02/2012
Colecciones
Varios objetos vienen en las versiones singular y plural; por ejemplo, libro y libros, hoja de clculo y hojas de clculo. Las versiones en plural se denominan colecciones. Los objetos de una coleccin se usan para realizar una accin en varios elementos de esa coleccin. Ms adelante, en este artculo, se explicar cmo usar la coleccin Worksheets para cambiar el nombre de cada hoja de clculo de un libro.
16/02/2012
10
Macros y el Editor de Visual Basic
Luego de conocer tericamente en parte cmo Microsoft Excel 2010 expone su modelo de objetos, puede intentar llamar a los mtodos de un objeto y establecer las propiedades del objeto. Para hacerlo, debe escribir el cdigo en un lugar y de una manera que Office pueda comprender; generalmente, mediante el uso del Editor de Visual Basic. Aunque se instala de forma predeterminada, muchos usuarios ni siquiera saben que est disponible hasta que no se habilita en la cinta de opciones.
16/02/2012
11
Ficha Programador
Todas las aplicaciones de Office 2010 usan la cinta de opciones. La ficha Programador es una de las fichas incluidas en la cinta de opciones, donde se puede tener acceso al Editor de Visual Basic y a otras herramientas de programador. Debido a que Office 2010 no muestra la ficha Programador de manera predeterminada, debe habilitarla mediante el siguiente procedimiento:
1. 2. 3. 4.
Ficha Archivo Opciones Personalizar cinta de opciones Activar la casilla Programador y <Aceptar>
16/02/2012
12
Problemas de seguridad
Haga clic en el botn de Seguridad de macros para especificar qu macros pueden ejecutarse y en qu condiciones. Aunque el cdigo de macros de sistemas no confiables puede daar gravemente el equipo, las condiciones de seguridad que impiden ejecutar macros tiles pueden disminuir en gran medida la productividad. Si la barra Advertencia de seguridad: las macros se han deshabilitado aparece entre la cinta de opciones y el libro, cuando abre un libro que contiene una macro, puede hacer clic en el botn Habilitar contenido para habilitar las macros. Adems, como medida de seguridad, no puede guardar una macro en el formato de archivo predeterminado de Excel (.xlsx); debe guardar la macro en un archivo con extensin especial (.xlsm).
16/02/2012
13
Problemas de Seguridad
mi primera Macro
Editor de Visual Basic
Alt+F11 Barra de Herramientas: Visual Basic Herramientas, Macro, Editor
Insertar Mdulo
Sub Bienvenido1() msgBox Hola a todos" End Sub
de V.B.
Sub Bienvenido2() ActiveCell.Value = Hola a todos" End Sub
16/02/2012
15
Uso de la grabadora de macros
A veces una simple macro grabada es todo lo que se necesita; en estos casos, incluso, no es necesario mirar el cdigo. Por lo general, la grabacin por s sola no es suficiente, pero s, un punto de inicio en el proceso automatizado para la solucin de su problema. Para usar la grabadora de macros como punto de inicio de la solucin 1. Grabe las acciones que desea codificar. 2. Revise el cdigo y busque las lneas que realizan esas acciones. 3. Elimine el resto del cdigo. 4. Modifique el cdigo grabado. 5. Agregue variables, estructuras de control y otro cdigo que la grabadora de macros no pueda grabar.
16/02/2012
16
OBJETO RANGE, SELECCIN CELDAS
SELECCIONAR UNA CELDA Range(B5).select SELECCIONAR VARIAS CELDAS Range(B7:C20).select SELECCIONAR CELDAS CONTIGUAS DE UNA LISTA (De izquierda a derecha y hacia abajo) Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select (De abajo hacia arriba y a la izquierda) Range(Selection, Selection.End(xlUp)).Select Range(Selection, Selection.End(xlToLeft)).Select
16/02/2012
17
OBJETO RANGE, SELECCIN CELDAS
IR AL FINAL DE CELDAS SELECCIONADAS O DETENERSE EN UNA CELDA CON DATOS Selection.End(xlDown).Select IR A UNA CELDA DEBAJO DE LA ACTIVA ActiveCell.Offset(1, 0). Select ESCRIBIR EN UNA CELDA Range(A5").Value = "SENATI pni"
16/02/2012
18
OBJETO RANGE, SELECCIN CELDAS
ESCRIBIR EN UNA CELDA A UNA DISTANCIA RELATIVA A LA CELDA ACTIVA Range(A5").Select ActiveCell.Range(A1").Value = "Trujillo" ActiveCell.Range(B2").Value = "La Libertad"
16/02/2012
19
OBJETO RANGE, SELECCIN CELDAS
ESCRIBIR EL MISMO DATO EN UN RANGO DE CELDAS Sheets(2).Range("A1:B10").Value="Per" ESCRIBIR EN LA CELDA TRES ABAJO Y UNA A LA DERECHA DE LA CELDA ACTIVA ActiveCell.Cells(4,2).Value="Excel" recuerde que lo anterior es lo mismo que: ActiveCell.Range("B4").Value = "Excel" y lo mismo que: ActiveCell.Offset(3, 1).Value = "Excel"
16/02/2012
20
OBJETO RANGE, SELECCIN CELDAS
ESCRIBIR UN DATO EN UNA CELDA ABSOLUTA UTILIZANDO CELLS(N) Cells(32769).Value = "Fcil" Nota: CELLS Cuenta desde la celda A1 como 1, B1 como 2, C1 como 3
. XFD1 como 16384. Es decir de izquierda a derecha a partir de la celda A1 sin importar la celda activa.
ESCRIBIR EN UNA CELDA RELATIVA A UN RANGO SELECCIONADO Range("A1:D5").Select Selection.Interior.Color = RGB(200, 200, 200) Selection.Cells(6) = "123" Cells(1).Select
16/02/2012
21
Cells(1)
Cells(2)
Cells(5)
Cells(6)
16/02/2012
22
TRATAMIENTO DE HOJAS
NOMBRAR HOJA Sheets(1).Name = BaseDatos Sheets(2).Name = Consolidados Sheets(3).Name = Grficos AGREGAR HOJA (siempre se agrega antes de la hoja activa en Excel 2010) Sheets.Add ACTIVAR UNA HOJA Sheets(n).Activate o Sheets(n).Select Sheets("Peru").Select 'activa Peru si existe
16/02/2012
23
TRATAMIENTO DE HOJAS
MOVER LA HOJA ACTIVA AL FINAL ActiveSheet.Move after:=Sheets(Sheets.Count) Nota: Sheets.Count devuelve un valor entero que es igual al total de hojas. NOMBRAR LA PENULTIMA HOJA Sheets(Sheets.Count-1).Name=etiqueta ELIMINAR LA ULTIMA HOJA Sheets(Sheets.Count).Delete
16/02/2012
24
TRATAMIENTO DE HOJAS
Pregunta Que realiza la siguiente lnea de cdigo?: MsgBox (La ultima hoja se llama" & chr(13) _ &Sheets(Sheets.Count).Name) COPIAR UNA HOJA EN EL LIBRO ACTIVO Ejemplo: Reemplazar la Hoja1 con el nombre de la hoja a ser copiada (Uso de After o Before) 'Duplicar la hoja2 a la derecha Sheets(2).Copy After:=Sheets(2) Sheets(2).Name=Copia
16/02/2012
25
TRATAMIENTO DE HOJAS
COPIA LA HOJA ACTIVA ANTES DE LA HOJA1 ActiveSheet.Copy Before:=Sheets(1) COPIA LA PRIMERA HOJA AL FINAL Sheets(1).Copy After:=Sheets(Sheets.Count) COPIA LA PRIMERA HOJA DE UN LIBRO ABIERTO A OTRO LIBRO ABIERTO Workbooks("Libro1.xlsm").Sheets(1).Copy _ After:=Workbooks("Libro2.xlsx").Sheets(1)
16/02/2012
26
TRATAMIENTO DE HOJAS
INSERTAR UNA HOJA AL FINAL Sheets.Add After:=Sheets(Sheets.Count) VISTA PRELIMINAR DE LAS HOJAS SELECCIONADAS ActiveWindow.SelectedSheets.PrintPreview SELECCIONAR 3 HOJAS Sheets(Array("Hoja1", "Hoja2", "Hoja3")).Select
Tambien puede ser lo mismo:
Sheets(Array(Sheets(1).Name, Sheets(2).Name, Sheets(3).Name)).Select
16/02/2012
27
APLICAR BORDES A UNA LISTA COMPLETA
Ojo: Partir ubicndose en la celda superior izquierda de la lista Sub Seleccionarlista() Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Call aplicarbordes End Sub ______________________________________________ Sub aplicarbordes() Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous Selection.Borders(xlEdgeTop).LineStyle = xlContinuous Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Borders(xlEdgeRight).LineStyle = xlContinuous Selection.Borders(xlInsideVertical).LineStyle = xlContinuous Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous 'Selection.Borders(xlDiagonalUp).LineStyle = xlNone 'Selection.Borders(xlDiagonalDown).LineStyle = xlNone ActiveCell.Offset(0, -1).Range("B1").Select End Sub
16/02/2012
28
Ejercicio propuesto
Crear una lista de 12 Celdas En la hoja 3 de un nuevo libro La celda esquina superior izquierda es B4 La lista tendr 4 columnas Los titulos sern: "Items","Enero","Febrero" y "Marzo" Los ttulos tendran relleno Celeste, letras azules Toda la lista tendr borde delgado de color Rojo. La 1ra columna de Items tendr los datos: "Trujillo" y "Vir" Repetir el dato "100" en las otras celdas de la lista.
16/02/2012
29
Un posible ejemplo de solucin del ejercicio (1/2)
Sub ejercicioDomingo14112010() Range("B4").Select ActiveCell.Value = "Items" ActiveCell.Offset(0, 1).Value = "Enero" ActiveCell.Offset(0, 2).Value = "Febrero" ActiveCell.Offset(0, 3).Value = "Marzo" ActiveCell.Offset(1, 0).Value = "Trujillo" ActiveCell.Offset(2, 0).Value = "Vir" ActiveCell.Offset(1, 1).Select ActiveCell.Range("A1:C2").Select Selection.Value = "100" Range("B4").Select Call aplicarformato Range("B4:E4").Select Selection.Interior.Color = RGB(0, 0, 255) Selection.Font.Color = RGB(0, 255, 255) Cells(1).Select End Sub ..contina
16/02/2012
30
Un posible ejemplo de solucin del ejercicio (2/2) Sub aplicarformato() Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Borders.LineStyle = xlContinuous Selection.Borders.Color = RGB(255, 0, 0) End Sub