PROGRAMACION VBA PARA EXCELINTRODUCCION: Si bien la grabadora de macros es muy útil y genera un código siempre correcto, tiene dos desventajas: 1. 2. genera mas código que el necesario. 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 luego de hacer doble clic en Hoja1por ejemplo.ambas formas nos lleva. al editor . estaran relacionadas con la Hoja1. Para ejecutar este código pulsamos en el icono o en la tecla F5 para que aparezca el panel Macros .las macros que se escriban aquí. 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 código se escribe entre "Sub" y "End Sub" y que el nombre no tiene espacios y termina con "( )" . donde puede verse el nombre de la macro que ya está seleccionada. Rangos. luego pulsamos en "ejecutar" y despues en el icono a la pantalla con el resultado . o no tener ninguno. Escribamos el valor 2007 en la elda D8 y si lo queremos borrar A estas alturas estamos en condiciones de explicar estos sencillos códigos: En la programación VBA se trabaja con OBJETOS ( Hojas. estar seleccionada. por ejemplo el objeto celda pude tener la propiedad de alto. tener un valor. ancho. tiene propiedades. etc En los códigos 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 número (2007) y despues estar vacía. o seleccionando " Alta + F5 que nos lleva que es la selección de la celda B5. CODIGOS MAS SIMPLES PARA EMPEZAR 1-Seleccionar una Celda . Otro código muy simple es escribir un valor en una celda. celdas. etc) que como todo objeto. Bold = True 4-Letra Cursiva Selection.Underline = xlUnderlineStyleSingle 6-Centrar Texto With Selection .Font.Select 2-Escribir en la celda que está seleccionada en el momento actual Activecell.Font.Range("A1").HorizontalAlignment = xlCenter End With 7-Alinear a la izquierda With Selection .HorizontalAlignment = xlRight End With 9-Tipo de Letra(Fuente) With Selection .FormulaR1C1="Pedro" la combinación los códigos 1 y 2 es equivalente a esta sola línea: Range("A1").Italic = True 5-Letra Subrayada Selection.Value=" pedro" El uso de FormulaR1C1 sera explicado mas adelante 3-Letra Negrita Selection.HorizontalAlignment = xlLeft End With 8-Alinear a la Derecha With Selection .Font. EntireColumn. Orientation:=xlTopToBottom 16-Buscar Cells.Insert 20-Eliminar Columna .. After:=ActiveCell.Font . MatchCase:=False. Header:=xlGuess.Find(What:="César".Size = 12 End With 11-Copiar Selection. _ OrderCustom:=1. Orientation:=xlTopToBottom 15-Orden Descendente Selection.Name = "Arial" End With 10-Tamaño de Letra(Tamaño de Fuente) With Selection. LookIn:=xlFormulas. Order1:=xlDescending. Order1:=xlAscending.Copy 12-Pegar ActiveSheet. _ OrderCustom:=1. MatchCase:=False.Sort Key1:=Range("A1").Sort Key1:=Range("A1"). SearchOrder:=xlByRows.Cut 14-Ordenar Ascendente Selection. MatchCase:= _ False).Paste 13-Cortar Selection. SearchDirection:=xlNext.Insert 18-Eliminar Fila Selection.Delete 19-Insertar Columna Selection.Font .Activate 17-Insertar Fila Selection.EntireRow. Header:=xlGuess.EntireRow. LookAt:=xlPart. Significado de la FORMULA R1C1 La FORMULA R1C1 se emplea para colocar el resultado de una línea de código en la celda que actualmente está activa. ReadOnlyRecommended:= _ False. o sea. Password:="". el código que se debería escribir es el siguiente El paréntesis destacado en rojo tiene por objetivo cubrir el tango donde están los números a sumar. Veamos el siguiente caso supongamos que queremos sumar los números de de la columna D y que el resultado aparezca en la celda F6 que es la que está seleccionada.Selection.Delete 21-Abrir un Libro Workbooks.EntireColumn.SaveAs Filename:="C:\Mis documentos\tablas.xls" 22-Grabar un Libro ActiveWorkbook.Open Filename:="C:\Mis documentos\Tablas dinamicas. desplazarme 2 columnas a la izquierda [-2] con 5 y 2 filas hacia arriba es decir . WriteResPassword:="". CreateBackup:=False La mayoria de estos códigos se pueden verificar con la grabadora de Macros. FileFormat _ :=xlNormal.xls". Wend Do . Estos son: While . Esto se solucionado mediante los llamados estructuras de iteración.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 aplicación de Excel Set Excel = CreateObject("excel. como en el caso anterior.If . lo que haremos mediante ejemplos Estructuras de iteracion Frecuentemente algunas líneas de código de repiten muchas veces con el consiguiente aumento del tamaño del programa. Cuando escribimos una función.FormulaR1C1 = "=SUM(R[]C[]:R[]C[])". pero una cosa fundamental es entender las estructuras de control de flujo de programa.Next Estructuras de desicion: .Then . siempre debe ser escrita ActiveCell.Loop Do .[-5] y [-2]. 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 .While . también llamadas ciclos de repetición o bucles.Else Select . Se entiende que R significan filas y C columnas y que anteponemos un si nos desplazamos hacia la izquierda o hacia arriba.Application" ) 'Se abre el archivo existente .Until --Loop For . pues el segundo igual es que caracteriza a la función y el paréntesis el rango donde se aplica. Excel. "D45" ).Range("A1" ). 'Se hace visible la ventana de Excel Excel.Visible = True 'Asignación de texto y formato para celdas 'Esta instrucción sirve para combinar celdas Hoja.Workbooks.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 instrucción pero con el 'nombre de la hoja que se va a modificar.Open ("Direccion_del_Archivo" ) 'Se activa la hoja para poder modificarla Set Hoja = Excel.Visible = True 'Esta instrucción puede ir en cualquier lugar del código '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 aplicación de Excel Set Excel = CreateObject("excel.Merge 'Letra en negrita Hoja.Application" ) 'Se Crea el Libro de Trabajo Excel.Bold = True 'Color de la fuente .Font.Range("A1".Workbooks.Add 'Se hace visible la ventana de Excel Excel. xlThick 'Si no se quiere hacer ningún cambio al tipo de fuente por defecto se deja así Hoja.Borders(xlBottom).Columns("A" ).Font.Borders(xlTop).Range("B2" ). 215.Range("B2" ).LineStyle = xlContinuous 'xlContinuous se puede cambiar por xlDouble.Range("A1" ).Color = RGB(215.Cells(1.Cells(1.Range("A1" ).LineStyle = xlContinuous Hoja.Rows(1).Size = 12 'Tipo de fuente que se usará Hoja. 0) 'Tamaño de la fuente Hoja.Color = RGB(255.Hoja.Range("A1" ).LineStyle = xlContinuous Hoja. 100.Borders(xlLeft).Interior.Font.LineStyle = xlContinuous Hoja.Range("A1" ).Font. 1) = "Hola" 'Borrar una hoja del libro de Excel se hace de la siguiente manera .Range("A1" ).Range("A1" ).Rows("1" ).Borders(xlRigth).Range("A1" ).Rows(1). 1) = "Texto" 'Cambiar color de relleno de la celda Hoja.RowHeight = 50 'en la parte de rows va el numero de la fila 'Bordes de celdas Hoja.Name = "Comic Sans MS" 'Texto de la celda Hoja.ColumnWidth = 12 'en la parte de Columns va la letra de la columna 'Cambiar altura de una fila Hoja.Range("A1" ). 215) 'Cambiar ancho de una columna Hoja. Sheets("Sheet1" ) Hoja.Range("A4" ).xls" ) 'Para cerrar la aplicación Excel.Range("A1" ).Workbooks.Application.Name = "Hola" 'Forma de ejecutar fórmulas de Excel 'En este caso se ponen las celdas o rango de celdas igual que como se haría 'en Excel puede ser sin el signo igual "=" o sin él.Delete 'Para cambiar el nombre de la hoja Set Hoja = Excel.Value) 'Guardar el archivo modificado Hoja.SaveAs ("dirección_junto_con_nombre_de_archivo" ) 'Ejemplo Hoja.SaveAs ("C:\ejemplo.EVALUATE("SUM(A1:C1)" ) 'no se si sirve para todas las fórmulas pero las que he usado si funcionan 'Obtener el valor de una celda en específico 'Obtener una cadena de Texto Hoja.Set Hoja = Excel.Text) 'Obtener el valor numérico Hoja.Sheets("Sheet2" ) Hoja.Close 'Se limpian las variables de tipo objeto Set Excel = Nothing . Excel. Double: El Double es un número de 64-bit de coma flotante que se utiliza cuando se necesita una gran precisión. Byte: El Byte corresponde a una variable de 8 bits que puede almacenar valores de 0 a 255.228. Integer: El Integer o entero es un número de 16 bits que puede oscilar entre -32768 y 32767. Es muy útil para el almacenamiento de datos binarios.335 hasta 79.79769313486232E308 para valores positivos.94065645841247E-324 para valores negativos y de 4.514. Por ejemplo al declarar una variable en VBA basta añadir una línea de código para definir la naturaleza de los valores que almacenaremos en ella.337.648 y 2.950.264.264. Boolean: El Boolean tiene sólo dos estados. sin embargo existen dos inconvenientes en trabajar de esta forma. Verdadero y Falso. Long: El Long es un número de 32 bits que puede variar entre -2. que es un tipo flexible pero a que a la vez consume mucha memoria.337.335 si el valor no contiene cifras decimales. Los enteros se deben utilizar cuando se trabaja con valores que no pueden contener números fraccionarios.543. Otro problema de pasar datos como Variant es que se deja abierta la posibilidad de que ocurran errores más adelante en el programa.Set Hoja = Nothing Tipos de Datos en VBA Existen 12 tipos de datos diferentes con los que se puede trabajar. Tiene una precisión de hasta 28 decimales con valores desde -7. puede almacenar valores en un rango que va desde -79.402823E38 a -1.593. . Estas variables se utilizan generalmente como flags o condicionales.647.483.94065645841247E-324 a 1.401298E-45 a 3. Dim Numero As Integer Numero = 5 También es posible asignarle a la variable el valor directamente y sin especificar el tipo de dato.401298 E-45 para valores negativos y desde 1. Single: El Single es un número de 32 bits que va desde-3.228.402823E38 para valores positivos.593.483. este es el tipo de apropiado para su uso.79769313486232E308 a -4.950.543. Cuando no declaramos el tipo de dato los valores se pasan en formato Variant. Las variables Long sólo puede contener valores enteros.147.147. Estas variables pueden variar desde1.162.9228162514264337593543950335 hasta 7.9228162514264337593543950335.162. Decimal: El Decimal es un subtipo de dato Variant.514. Cuando se necesitan números fraccionarios dentro de este rango. Cada carácter tiene un valor que va desde 0 hasta 255 basado en el juego de caracteres ASCII. . una variable Object no contiene el valor en sí.String: El String se utiliza generalmente como un tipo de longitud para una cadena de texto. incluso cualquier instancia de objeto que la aplicación reconozca.000 a +922. Se usa sólo cuando no se está seguro del tipo o cuando se están acomodando datos externos y no se está seguro de las especificaciones del tipo de datos.000.000.000. Variant: Los Variant almacenan valores numéricos y no numéricos. Independientemente del tipo de datos al que haga referencia. En su uso. resultando en un rango de aproximadamente -922. Se utiliza Object cuando en el tiempo de compilación no se conoce a qué tipo de datos puede señalar la variable.000. ya que almacena valores muy grandes de casi cualquier tipo (coincide con el tipo de datos numérico doble). sino un puntero al valor. Object: El Object puede señalar a cualquier tipo de dato.337. Currency: El tipo de datos Moneda es en realidad un tipo entero internamente.000 para agregar cuatro dígitos a la derecha del punto decimal. Date: El Date almacena un valor numérico con formato especial que representa tanto la fecha como la hora. Debido al código que el puntero utiliza para buscar los datos. Permite hasta 15 dígitos a la izquierda del punto decimal. Una cadena de longitud variable puede contener un máximo de aproximadamente 2 mil millones de caracteres. El Date acepta la fecha o la hora. Los valores posibles van desde 1 de enero del año 100 a 31 de diciembre del año 9999. o ambas cosas. Son los más flexible de todos los tipos disponibles. las variables Object son de acceso un poco más lento que las variables que tienen un tipo explícito.000.337. se escala por un factor de 10.