Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Hoy en día, Microsoft Excel domina el mercado de las hojas de cálculo, obteniendo una
cuota de mercado alrededor de 90%.
Lo más último son las hojas on-line como 'Google Spreadsheets', introducidas en junio
del 2.006. La primera version de Excel fue introducida en 1.985, aunque no fue la
primera hoja de cálculo. Según varios artículos, la primera hoja de cálculo se llamaba
VisiCalc, introduciendo filas y columnas.
La competencia principal iba a ser Lotus 1-2-3, el cual creció hasta convertirse en
líder del mercado. No obstante, Excel ganó la carrera, y hoy se títula como no. 1 con
clara mayoría de cuota de mercado.
Excel 95
Excel 97
Excel 97 dio todavía más poder a programación, y ésta es muchas veces combinada con
Windows NT.
Excel 2000
Excel 2000 salió en el año 1.999, todavía más orientada hacía la web, y definitivamente
tenía una apareciencia más moderna que la del 97.
Excel 2002
Excel 2007
El Office 2007 tiene un aspecto diferente, es decir un sistema nuevo de los menús. Han
mejorado los gráficos bastante. Sin embargo, la verdad es que Excel lleva ya 10 años sin
cambios ni novedades significativos.
Un ejemplo de cómo utilizar esta numeración es el objeto Application. Este objeto tiene
una propiedad 'Version', que devuelve la versión Excel de la máquina.
Sub Devolver_VersionExcel()
intVersionExcel = Application.Version
Msgbox intVersionExcel
End sub
Libro
El propio archivo .XLS, ej. 'Factura.xls'. Es el contenedor de todas las hojas de un libro,
tanto de los módulos de VBA. También hay otros formatos de libros de Excel, como
el .XLA (add-ins). Unos ejemplos de formatos son
Nombre Sufijo
Excel Workbook .xls
Excel Add-in (complemento) .xla
Template (Excel 97-2000) .xlt
Workspace (Excel 97-2000) .xlw
Excel version 4.0 workbook .xlw
Para ver más: support.microsoft.com/ VBA editor
Hoja de cálculo
El libro contiene 1 o más hojas (máximo 256). Por defecto, Excel te da 16 hojas
al abrir un libro nuevo. No obstante, podrás cambiar este número en Herramientas -
Opciones. Además, la hoja puede presentar filas/columnas de dos maneras- A1 o R1C1
(Herramientas - Opciones - General).
Columnas
Cada hoja contiene 256 columnas, una cifra no variable.
Filas
Cada hoja contiene 65.536 filas, y no se puede alterar este número. ¿Y qué pasa si
suprimimos unas 10 filas? Pues, Excel nos añadirá 10 nuevas al final de la columna.
Celdas
Las intersecciones entre columnas y filas son las celdas. 256 col. x 65.536 líneas te dan
16.777.216 celdas en cada hoja. Es decir suficiente.
Contenido de celdas
Una celda puede contener 3 tipos de datos.
• texto
• números (valores)
• fórmulas (ecuaciones o funciones propias de Excel/usuario)
Formato de celda
Aparte del contenido, la celda también guarda un formato. El formato dice, por ejemplo,
que el valor de la celda se va a poner en negrita y cursiva. La distinción entre valor y
formato es muy importante de entender.
Formatos en Excel
El formato de una celda Excel se refiere del aspecto de ella, y de como presetará
la celda su contenido. Estamos hablando de formatos de números, bordes, color de
fondo etc.
Para dar formato a las celdas de un libro Excel hay que definir el formato en el cuadro
de diálogo Formato. El atajo para abrir este diálogo es CTRL + 1.
Abajo encontrarás enlaces a nuestras páginas sobre celdas Excel y formatos. Recuerda
que es muy importante formatear las celdas correctamente, sobre todo si se trata de un
libro Excel que vamos a distribuir a otras personas.
Por regla general, no se deben aplicar muchos formatos. Demasiado color/fuentes etc
puede hacer que tú hoja de cálculo sea difícil de leer y entender.
En vez de presentar un dinero así: 125050000,7 debes aplicar un formato como: 125
050 000,69
Como puedes ver en el primer ejemplo, la celda contiene un valor que termina en ,69.
Luego el formato dice cuántos decimales se van a mostrar.
Code Precio
AAA 28,48
ABA 298,55
Fuente
Usa fuentes que son fáciles de leer, tanto de números como de texto. No se debe
mezclar demasiadas fuentes en la misma hoja.
Bordes
Los bordes son muy útiles - sirven por ejemplo para distinguir títulos de los datos, o el
saldo de una columnas de datos. La manera más rápida de quitar todos los bordes:
Seleccionar area. Presiona CTRL + SHIFT + -.
Fondos
Según muchos, se debe tener un poco de cuidado al aplicar fondos - puede hacer que los
datos sean de díficil lectura. Si aplicas colores, un truco es utilizar colores claros, si no
los datos son díficiles de leer. Recuerda que los fondos oscuros son difíciles de
imprimir.
Desafortunadamente, los colores que Excel pone por defecto son muy fuertes. Los
podrás cambiar de un libro determinado, en Herramientas - Opciones - Color.
Lamentablemente, este cambio no se guarda para tú proximo libro de Excel. Una
solución es crear una macro personal.
Proteger
Esta propiedad de la celda determina si esta celda se incluirá si se activa la protección
de la hoja. Para activar la protección: Herramientas - Protección.... No utilices esta
función si no fuera realmente necesario - un libro protegido puede causar problemas.
Con bastante frecuencia quiero que celdas que contienen fechas tengan el formato
AAAA-MM-DD (año-mes-día, 2004-01-17) como algunos sistemas informáticos
trabajan con este formato.
Pero hay un problema; este formato no siempre está presente en todos los ordenadores.
Entonces se crea su propio formato AAAA-MM-DD.
B3= IF(C3<>"";COUNTA($C$3:C3)&".";"")
B4= IF(C4<>"";COUNTA($C$3:C4)&".";"")
El uso de los atajos del teclado en Excel aumentará tu productividad, todo usuario
avanzado de Excel lo puede garantizar. Los atajos te pueden ahorrar bastante tiempo.
Los atajos de Excel son imprescindibles para muchos usuarios de Excel y VBA.
Sin duda alguna es buena idea aprender de memoria los atajos más útiles como por
ejemplo CTRL + C para copiar las celdas Excel seleccionadas.
• Ctrl + C: Copiar
• Ctrl + V: Pegar
• Ctrl + X: Cortar
• F2: Entrar contenido en una celda
• Ctrl + signo más/signo menos: Permite añadir filas o columnas
• Ctrl + 1: Cambiar el formato de la celda seleccionada
Cerrar libro/windows
Cerrar libro activo CTRL + w
Cerrar aplicación Excel MAYUS + w
Abrir libros/hojas
Menú Abrir CTRL + o (letra)
Abrir libro nuevo CTRL + N
Añadir hoja nueva MAYUS + F11
Guardar libros
Menú Guardar F12
Abrir libro nuevo CTRL + N
Guardar CTRL + s
Edición
Editar celda F2
Cancelar Esc
Moverse al principio de la fila Ctrl + Intro
Completar el editar celda, moverse una celda para abajo Tab
Completar el editar celda, quedarse en la misma celda Flechas
Moverse un carácter Inicio
Moverse a principio de la línea. Fin
Seleccionar bloques de texto/números en una línea. Ctrl + Mayus + Flecha
Empezar nueva línea en la misma celda Alt + Intro
Introducir texto
Introducir texto, sea cual sea el formato de la celda '
Repetición de instrucciones
Repetir la última instrucción Ctrl + Y
Repetir la última instrucción F4
Deshacer la última instrucción Ctrl + Z
Nombrar rangos
Definir nombre a rango Ctrl + F3
Rellenar columnas/filas
Rellenar hacia abajo Ctrl + J
Rellenar hacia derecha Ctrl + D
Formatos (estandar)
Formato moneda CTRL + MAYUS + $
Formato porcentaje CTRL + MAYUS + %
Formato fecha CTRL + MAYUS + #
Formato número (2 dec., sep. de mil) CTRL + MAYUS + !
Bordes
Aplicar bordes CTRL + MAYUS + &
Suprimir bordes CTRL + MAYUS + _
Formatos de texto
Negrita CTRL + N
Cursiva CTRL + K
Subrayado CTRL + S
Introducir texto sea cual sea el formato de la celda '
Tamaño de fuente CTRL + MAYUS + P
Ocultar filas/columnas
Ocultar fila CTRL + 9
Mostrar fila CTRL + MAYUS + 9
Ocultar columna CTRL + 0 (cero)
Mostrar columna CTRL + 0
Añadir/suprimir filas
Añadir fila MAYUS + Barra, CTRL + +
Suprimir fila MAYUS + Barra, CTRL + -
Añadir/suprimir columnas
Añadir columna CTRL + Barra, CTRL + +
Suprimir columna CTRL + Barra, CTRL + -
Referencias
Enlace Descripción
Tipos Tipos de referencias.
Estilos A1 vs. R1C1.
Relativas y absolutas Subtipos de referencias
Tipos de referencias
Las referencias es una identificación a una celda (o a un rango de celdas). Esta
identificación es necesaria para fórmulas y para operaciones del VBA (Visual Basic for
Applications, macros etc).
Referencia externa
Igual que las referencias internas, pero identifica celdas de otro libro.
Referencia remota
También se puede crear referencias a otros programas, por ejemplo a traves del
protocolo DDE (Dynamic Data Exchange).
Estilos de referencias
Hay dos estilos de referencia: 'A1' y 'R1C1'. Excel te da el estilo 'A1' por defecto.
El estilo A1 es el mejor para fórmulas en la hoja Excel. Es más fácil de leer que el
R1C1. Este segundo es muy útil a la hora de programar en VBA de Excel.
Este cambio también puede realizarse desde VBA de Excel. Un truco es preparar un
macro para cambiar entre A1 y R1C1. Esto puede agilizar la programación bastante.
Sub CambiarEstilo
End sub
Referencia relativa
Referencia relativa son referencias que, al copiar la celda que contiene la referencia,
desplaza su referencia tanto como la distancia entre la celda copiada y la celda donde se
pega.
Ejemplo: = B2
Referencia absoluta
Una referencia absoluta no deplaza su referencia en absoluto.
Ejemplo: = $B$2.
Los $ los puedes introducir tecleando, pero es más fácil utilizar F4 al editar la fórmula.
Para enclavar sobre la fila 2: =B$2. Esto es más fácil probarlo en directo, copiando
rangos, enclavando filas y columnas.
Las fórmulas y funciones de Microsoft Excel son una parte fundamental de una hoja de
cálculo. Sirven para resolver todo tipo de cálculo, desde sencillas fórmulas aritméticas
hasta calcular grandes rangos de datos estadísticos para informes económicos.
Una fórmula o función Excel calcula un valor nuevo a partir de valores contenido en
celdas únicas o en rangos de varias celdas de la hoja de cálculo. Aparte de números y
valores, las fórmulas Excel contienen operadores. Estos escpecifican qué operaciones
usar.
Operadores utilizados en fórmulas Excel
Los operadores especifcan que tipo de cálculos la fórmula va a ejercer sobre los
elementos de la fórmula Excel. Se puede dividir los operadores de Excel en 4
categorías. Sigue las enlaces para leer más de cada uno.
Ten en cuenta que Excel tiene varios juegos de operadores. Las formulas tienen los
suyos, VBA tiene otros, pero que a veces coinciden. Ver operadores de VBA.
Enlace Descripción
Operadores aritméticos Adición etc.
Operadores comparador Resultados lógicos, como VERDADERO/FALSO.
Operadores concatenar texto Adjuntar texto.
Operadores referencias de rango Lo que divide primer/último area de un rango.
Operadores lógicos Para evaluar cadenas de texto/valores.
TEXTO(A1; _formato)
En el ejemplo abajo vamos a utilizar los valores de las celdas D5 y D6. Estos valores
tienen los formatos de dos decimales y separador de miles. Este formato se expresa con
# ###,00.
Ahora, no es difícil aplicar un formato para que la fecha muestre solo el mes. Pero para
hacer cálculos (por ejemplo sumar por mes), el FORMATO no da. Lo que nos interesa
es el VALOR. Por eso vamos a añadir una columna nueva que nos da la fecha 1 del mes
correspondiente. Con esta columna podemos luego proceder a sumar por condicion
(MES).
La fórmula
Tenemos la fecha de 30-01-2004 en la celda A1, y queremos una fórmula que nos
devuelva 01-01-2004. La fórmula sería:
= FECHA(AÑO(A1);MES(A1);1)
Ejemplo
E5:E8: Aquí sacamos el valor del primer día del mes.
Fórmula Excel cual nos permite ver como hallar el tiempo transcurrido entre dos fechas.
Repasamos unas funciones Excel no tan conocidas. Las fórmulas INFO y CELDA nos
permiten devolver información tanto del sistema como de celdas concretas, y
presentarla en cualquier celda Excel. Esto puede ser bastante interesante a la hora de
diseñar un proyecto en Excel..
Además, estas fórmulas Excel se pueden aplicar dentro del código VBA. Es una manera
muy rápida para devolver por ejemplo la versión de Excel.
Una advertencia
Estas funciones no se recalculan automaticamente, sino hay que hacerlo manualmente
(pulsar F9).
INFO
Concepto Fórmula Ejemplo
Sistema pc/mac =INFO("system") pcdos/mac
Versión de Excel =INFO("release") 10.0
Sistema operativo =INFO("osversion") Windows (32-bit) NT 5.01
Carpeta actual =INFO(directory") C:\excel_vba
Memoria disponible =INFO("totmem") 2 013 088
CELDA
Para más información de CELDA, ver la ayuda de Excel.
Fórmulas CONTAR.SI /
SUMAPRODUCTO
En este capítulo explicamos como contar celdas que cumplan con una o más
condiciones.
La fórmula CONTAR.SI cuenta el número de celdas de un rango que cumplan con una
única condición.
=CONTAR.SI(A1:A5;"="&C1)
=SUMAPRODUCTO((A1:A5>6)*(A1:A5>9))
=SUMAPRODUCTO((A1:A5>C1)*(A1:A5>9))
Descargar archivo
Es un truco útil y fácil de emplear por su sencillez, tiene varias posibles aplicaciones.
Un interesante ejemplo de como combinar un gráfico con los controles de la hoja Excel.
El ejemplo no utiliza VBA.
Las cartas Gantt (Henry L. Gantt, 1861-1919) son casi imprescindibles en la dirección
de proyectos, tanto para poder ver el tiempo dedicado a las actividades del proyecto,
como la dependencia entre ellas.
José Skraviuk nos manda esta plantilla de como preparar una carta Gantt en Excel.
Descargar archivo Excel/Carta Gantt (zip)
VBA (Visual Basic for Applications) es un lenguaje de macros utilizado para programar
pequeñas aplicaciones dentro de un documento Excel, permitiendo la ampliación de la
funcionalidad del mismo.
Enlace Descripción
Qué es Excel VBA
El editor VBA de Excel
¿Qué es VBA?
VBA significa Visual Basic for Applications. Es un lenguage de programación que
surge de Visual Basic (VB). Se podría decir que es un dialecto de VB. VBA de Excel
está adaptado a Excel, para trabajar con celdas, hojas, autofiltro etc (es decir, los objetos
de la aplicación Excel).
Con este lenguage de programación puedes crear tus propios programas en Excel. Estos
programas pueden ser todo desde una macro (una pequeña programa VBA, por ejemplo
un atajo personalizado) hasta una aplicación entera con listas desplegables, menús
etcetera.
También puedes crear aplicaciones que importan datos desde el libro mayor,
reorganizan los datos, y crean informes personalizados para cada departamento. Casi no
hay límites.
VBA de Excel te permite interactuar no solo con otros libros Excel, sino con todos los
programas Office, como Access, Word etc (menos InfoPath que forma parte del Office
2003).
Origen de VBA
Es de Microsoft, y surge de BASIC (Beginner´s All-purpose Symbolic Instruction
Code, o Código de Instrucciones Simbólicas de Uso General para Principiantes), el cual
en su turno es un lenguage que tiene muchos años ya (desde los años sesenta).
Contenido de un proyecto
En la columna de izquierda tenemos las piezas que forman parte del proyecto. En este
ejemplo tenemos dos libros abiertos:
Definiciónes
La definición más común de una macro es que se trata de un pequeño programa que
sirve para automatizar tareas repetitivas. Normalmente se guarda en el mismo libro
Excel en cual se va a ejecutar, pero se puede guardar en otros libros Exel, tanto como en
libros Add-in.
Preparar la grabación
Entra Herramientas - Macro - Grabar nueva macro.
Presiona OK. Ahora la macro grabará todo lo que pase a tu libro de Excel. Si
seleccionas celda H1, esa misma acción se grabará. Después, al ejecutar la macro, esa
celda se selecionará (¡sorpresa...!). Entonces, mientras grabas, seleciona celda H1,
cambia el formato a Número - 2 decimales. Paramos la grabación.
Al cambiar el código un poco podremos hacer que VBA cambie el formato a cualquier
celda que tengas seleccionada. Limpia el código para que quede el siguiente marcado.
Selection.NumberFormat = "0.00"
Ejecutar la macro
Ahora, vuelve a la hoja, y prueba tú nueva macro. Selecciona un rango de celdas, aplica
el atajo (CTRL+L). También puedes ejecutar la macro desde Herramientas - Macro -
Macros.
Al abrir Excel, este libro se cargará, ocultamente. De este modo, las macros que
grabes allí siempre estarán accesibles. Ideal para tus propios atajos, cómo por ejemplo
Separador de miles, Pegar valor etc.
1. Por tu cuenta:
Crea un libro nuevo, guardalo en la carpeta InicioXL indicado arriba, vuelves a Excel
para luego ocultarlo (Ventana - Ocultar). Luego, para colocar macros dentro de tu nuevo
libro, puedes introducirlas manualmente (editor VBA) o grabar una macro nuevo y
guardarla dentro del Libro de Macros personales. Para grabar una macro ver Grabar una
macro.
Al grabar una macro indicas donde guardarla. Si eliges Libro de macros personales,
Excel creará el libro Personal.xls en la carpeta InicioXL. Para grabar una macro ver
Grabar una macro.
Para ayuda sobre como se graban las macros, ver Grabar una macro.
Alineación izquierda/derecha
Sub Ajustar_izq_der()
Selection.HorizontalAlignment = xlLeft
Else
Selection.HorizontalAlignment = xlRight
End If
End Sub
Sub Convertir()
z = Round(Cell / 166.386, 2)
Cell.Value = z
Cell.NumberFormat = "#,##0.00"
Next Cell
End Sub
Pegar formato
Sub PegarFormato()
Selection.PasteSpecial Paste:=xlFormats
Application.CutCopyMode = False
End Sub
Pegar valor
Sub PegarValor()
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub
Dos decimales
Sub DosDec()
z = Round(Cell, 2)
Cell.Value = z
Cell.NumberFormat = "#,##0.00"
Next Cell
End Sub
Separador de miles
Sub SeparadorMil()
Area.NumberFormat = "#,##0.00"
Else
Selection.NumberFormat = "#,##0"
End If
End Sub
Sub SuprimirFilasVacias()
LastRow = ActiveSheet.UsedRange.Row - 1 + _
ActiveSheet.UsedRange.Rows.Count
If Application.CountA(Rows(r)) = 0 Then
Rows(r).Delete
End If
Next r
End Sub
Autofilter
Sub FilterExcel()
Selection.AutoFilter
End Sub
Grids
Sub Grids()
ActiveWindow.DisplayGridlines = False
Else
ActiveWindow.DisplayGridlines = True
End If
End Sub
Cambiar A1 a RC (columnas tiene números en vez de
letras)
Sub Rc()
Application.ReferenceStyle = xlA1
Else
Application.ReferenceStyle = xlR1C1
End If
End Sub
Sub Paleta()
ActiveWindow.Zoom = 75
End Sub
Sub MostrarHojas()
wsHoja.Visible = True
End If
Next wsHoja
End Sub
VBA Variables
Enlace Descripción
Tipos de variables Referencia de variables
Declarar variables La importancia de declarar las variables.
Tipos de variables
Abajo presentamos los más frecuentes tipos de variable de Excel VBA.
Declarar variables
¿Porqué declarar variables?
Te ayudará a programar
VBA te ayuda a elegir propiedades/métodos que corresponden a esa variable.
Declarar variables
Una variable se declara empleando el comando DIM. DIM significa Dimension, y viene
del antiguo BASIC. Al declarar, puedes indicar el número de dimensiones que la
variable va a tener (ej. guardar números dentro de una variable, en 3 dimensiones).
Para que sea más fácil leer el código, pon un indicador en el nombre de la variable. Así
basta con leer el nombre de la variable para saber de que tipo es. Puede ser str para
String, int para Integer etc.
Una alternativa al DIM es Public. La variable será accesible desde todas partes de tú
proyecto VBA.
El nombre puede tener hasta 254 carácteres (por supuesto demasiado...). No puede
empezar con una cifra. Algunos nombres son reservados para VBA/Excel, la cual te
notificará al ejecutar.
Tipo de
Ubicación Accesible
declaración
Encima del procedimiento (antes Todos los procedimientos del
Dim
del primer Sub) módulo.
Antes de un procedimiento
Dim Ese procedimiento .
específico.
Dim Dentro de un procedimiento. Resto de ese procedimiento.
Encima del procedimiento (antes Todos los procedimientos (de
Public
del primer Sub) todos los módulos).
• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VBA
• VB
Do while... Loop
Repite las instrucciones mientras una condición es TRUE/VERDADERO.
Do until... Loop
Repite las instrucciones hasta que una condición se convierta en TRUE/VERDADERO.
While... Wend
Igual al bucle Do while... Loop.
Do While... Loop
Ejemplo
Excel tiene valores en las celdas B1:B100. Quieres buscar la primera celda que tenga un
valor más alto/igual que 1,50.
i = 1
Do While Cells(i, 2) <> "" significa que queremos que un bucle siga hasta que no hayan
más celdas con valores en esta columna.
Aplicamos la condición a cada celda, para luego salir del bucle (Exit Do) si encuentra
un valor igual a ó más alto que 1,50 (VBA utiliza punto en vez de coma para
decimales).
Do until... Loop
Instrucción que repite las instrucciones hasta que una condición se convierta en
TRUE/VERDADERO.
Ejemplo
Una hoja Excel tiene datos (en este caso nombres) en las celdas A1:A5. Queremos que
el bucle pare en "Alexis".
A B
1 Alberto
2 Alejandro
3 Alex
4 Alexis
5 Allain
6
i = 1
Es decir celda A1. Al final del bucle, i nos dará la línea que buscamos.
Do Until Cells(i, 1) = "Alexis" significa que queremos que un bucle que siga hasta que
se encuentre el texto "Alexis".
Al final presentamos una caja de diálogo para presentar el resultado, cual en este caso
sería 4.
While... Wend
Ver Do While...Loop.
Ejemplo
Creamos un bucle sencillo. Queremos que se repita 4 veces, y que la variable intValor
(al empezar = 1) se incremente con 2 cada vuelta. Este nos da el resultado intValor = 9
(1+2+2+2+2).
Observa que el bucle tiene step 1. Esto significa que i se incrementa con 1 cada vuelta.
Esto es, que si queremos un bucle que vaya para atrás, pondríamos step -1.
intValor = 1
For i = 1 to 4 step 1
intValor = intValor + 2
Next i
• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VBA
• VBA código
• Info
• Enl
Instrucción que repite las instrucciones según el número de objetos especificados. Por
ejemplo, For each Cell de un rango en Excel.
Ejemplo
En este ejemplo vamos a construir un bucle que evalua cada celda de un rango. El rango
será celdas A1:A5, que se escribe como Range(Cells(1, 1), Cells(5, 1). Con el Exit For
salimos del bucle al cumplir la condición.
Dim rngArea
• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VB
• VBA de Excel - ejemplos prácticos de
macros
• Una de las utilidades principales de VBA es la de automatizar tareas cotidianas,
como por ejemplo crear un atajo (del teclado) para la función de 'Pegar como
valor' en Excel. Estas pequeñas aplicaciones suelen denominarse 'macros', pero
Excel VBA también sirve para la programación de aplicaciones más complejas,
como servicios de bases de datos y la manipulación de archivos.
• Ejemplos de macros VBA de Excel
• Esta lista de ejemplos VBA de Excel recopila algunas pequeñas aplicaciones de
código VBA. Recuerda - haz una copia de seguridad antes de aplicar código
VBA a tus archivos.
•
Nº Versión
12 Excel 2007
11 Excel 2003
Excel 2002
10
("XP")
9 Excel 2000
8 Excel 97
7 Excel 95
Para presentar la impresora activa del usuario, en una caja de diálogo, pondríamos
Msgbox strImpresoraActiva
End sub
Msgbox Application.ActivePrinter
End sub
Abajo te presentamos una macro para presentar varios datos del usuario/maquina.
Sub Application_Data()
'dimensiones
Dim i, x As Integer
strDataArray(0) = Application.UserName
strDataArray(1) = Application.OrganizationName
strDataArray(2) = Application.OperatingSystem
strDataArray(3) = Application.Version
strDataArray(4) = Application.ProductCode
strDataArray(5) = Application.StandardFont
strDataArray(6) = Application.StandardFontSize
strDataArray(7) = Application.DecimalSeparator
strDataArray(8) = Application.ActivePrinter
strDataArray(9) = Application.DefaultFilePath
strDataArray(10) = Application.UserLibraryPath
x = 0
For i = 3 To 13
Cells(i, 4) = strDataArray(x)
x = x + 1
Next i
End Sub
'-----------------------------------------------------
Sub SuprimirDatosEnceldas()
End Sub
Este marcado sirve para averiguar el idioma de Excel del usuario. La función
Application.International de Excel VBA nos ayuda.
Lo único es que hay que saber los marcadores de telefonía de los países para
descodficar la respuesta de la función. Ver por ejemplo esta lista aquí.
El código
Sub DeterminarPais()
CodigoPais = Application.International(xlCountryCode)
End If
End Sub
• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VBA
• VBA código
• Info
• Enlaces
• XHTML
• CSS
ActiveWorkbook.Close
ActiveWorkbook.Close Savechanges:=True
ActiveWorkbook.Close(True)
ActiveWorkbook.Close(False)
ActiveWorkbook.Close Savechanges:=False
Cerrar libro Excel (variable, sin guardar cambios)
Application.DisplayAlerts = False
Windows(Libro_mayor).Close
Application.DisplayAlerts = True
Workbooks.Open FileName:="C:\Trabajo\Informe.xls"
strArchivo = Application.GetOpenFilename
On Error GoTo 99
Workbooks.OpenText Filename:=strArchivo
strArchivo = ActiveWindow.Caption
99:
Exit sub
strNombre = ActiveSheet.Parent.FullName
MsgBox ActiveWorkbook.FullName
strHoja = ActiveWindow.Caption
ActiveWorkbook.Sheets.Add Before:=Worksheets("Informe1")
Sheets("Informe1").Copy After:=Worksheets(Worksheets.Count)
Mover hoja
Worksheets("informe5").Move After:=Worksheets("Informe4")
intNumeroHojas = ActiveWorkbook.Worksheets.Count
For i = 1 To intNumeroHojas
For j = i To intNumeroHojas
Worksheets(j).Move Before:=Worksheets(i)
End If
Next j
Next i
Application.DisplayAlerts = False
For i = 1 To Sheets.Count
Sheets(i).Activate
xxx = ActiveCell.Worksheet.Name
ActiveWindow.SelectedSheets.Delete
End If
Next
Application.DisplayAlerts = True
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
ActiveWindow.ScrollWorkbookTabs Position:=xlLast
El código
'ruta a imagen
strRuta = "C:\imagen.jpg"
'fila/columna actual
intRowActual = ActiveCell.Row
intColumnActual = ActiveCell.Column
'fila/columna de scrollRow
intRow = ActiveWindow.ScrollRow + 1
intColumn = ActiveWindow.ScrollColumn
'insertamos comentario
Cells.ClearComments
.AddComment
.Comment.Text Text:="Hola"
.Comment.Visible = True
End With
Selection.ShapeRange.Fill.UserPicture strRuta
Cells(intRowActual, intColumnActual).Select
End Sub
Los procedimientos
Pon este código en el contenedor 'EsteLibro' del editor VBA (Herramientas - Macro -
Editor VBA).
Luego tienes que poner que hojas/palabra de paso (ver 'Preparar modelo' del código).
Dim z As Integer
Dim i As Integer
Dim x As Boolean
Application.EnableEvents = False
'comprobar hojas
strSegundaHoja = Sh.Name
Next i
z = ActiveWindow.Index
Windows(z).Visible = False
Windows(z).Visible = True
99:
'conectar Events
Application.EnableEvents = True
End Sub
'*************************************************
strStartHoja = Sh.Name
End Sub
Y como siempre, esta lista se puede crear manualmente. O se puede recurrir a una
macro de VBA, cual tardará al máximo un par de segundos para concluir el trabajo.
Procedimiento
Empezamos con un libro Excel cualquier, pero que tenga por lo menos dos hojas. Luego
vamos a crear un módulo dentro de este libro. En este módulo escribimos el código.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R)
algo como "ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
El código
Sub Links_hojas()
intFila = 4
intColumna = 1
'crear links
TextToDisplay:=wsHoja.Name
intFila = intFila + 1
End If
ProxHoja:
Next wsHoja
End Sub
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Conectar_Excel_ADO". Marca esta, y "Ejecutar".
Copia de seguridad
Guarda una copia de seguridad de tu libro. Hazlo porque nunca sabes.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R)
algo como "ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
El código
Sub QuitarVinculos()
varLink = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
i = 1
Do Until IsEmpty(varLink)
On Error GoTo 9
ActiveWorkbook.BreakLink Name:=varLink(i), _
Type:=xlLinkTypeExcelLinks
i = i + 1
Loop
End If
9:
Next
Next
End Sub
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Conectar_Excel_ADO". Marca esta, y "Ejecutar".
Procedimiento
Empezamos con el libro de una o varias hojas. Luego vamos a crear un módulo dentro
de este libro. En este módulo escribimos el código.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R)
algo como "ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
Código
Sub Crear_archivos_de_hojas()
Dim i As Integer
Application.ScreenUpdating = False
strStartHoja = ActiveCell.Worksheet.Name
For i = 1 To Sheets.Count
Sheets(i).Activate
strHoja = ActiveCell.Worksheet.Name
Sheets(strHoja).Copy
strRuta = "C:\excel\vba\ejemplos"
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWindow.Close Savechanges:=True
'repetir bucle'
Next
Sheets(strStartHoja).Activate
Application.ScreenUpdating = True
End Sub
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Conectar_Excel_ADO". Marca esta, y "Ejecutar".
Recuerda que tienes que adaptar la ruta donde guardar los archivos nuevos (strRuta).
Sub EncontrarUltimaColumna()
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
MsgBox intUltimaCol
End If
End Sub
Sub EncontrarUltimaColumna()
MsgBox intUltimaCol.Address
End If
End Sub
Sub SuprimirColumnas()
DeleteRange =("A1:B10")
With DeleteRange
cCount = .Columns.Count
If Application.CountA(.Columns(c)) = 0 _
Then .Columns(c).EntireColumn.Delete
Next c
End With
End Sub
Suprimir cada n-columnas
Sub SuprimirColumnas()
DeleteRange =("A1:B10")
With DeleteRange
cCount = .Columns.Count
.Columns(c).EntireColumn.Delete
Next c
End With
End Sub
El usuario tiene la posibilidad de elegir el color que prefiere. En este caso tiene unos
ejemplos pero se puede agregar más colores.
Descargar archivo
Descargar archivo Excel (zip)
El código
Option Explicit
'JOSE SKRAVIUK
'ayudaexcel@ yahoo.com.ar
If ActiveSheet.AutoFilterMode Then
Set af = ActiveSheet.AutoFilter
iFilterCount = 1
If fFilter.On Then
af.Range.Cells(1, iFilterCount) _
.Interior.ColorIndex = Range("color")
Else
af.Range.Cells(1, iFilterCount) _
.Interior.ColorIndex = xlNone
End If
iFilterCount = iFilterCount + 1
Next fFilter
Else
Rows(1).EntireRow.Interior.ColorIndex = xlNone
End If
End Sub
• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
• SQL
• VBA
• Filas Excel - macros VBA
•
• Encontrar última fila
•
•
• intUltimaFila = _
• Columns("A:A").Range("A65536").End(xlUp).Row
• Encontrar última fila
•
•
• intUltimaFila = _
• ActiveSheet.UsedRange.Row - 1 +
ActiveSheet.UsedRange.Rows.Count
• Encontrar última fila
•
•
• MaxRow = Cells.SpecialCells(xlLastCell).Row
• MaxCol = Cells.SpecialCells(xlLastCell).Column
• Encontrar última celda (buscar al revés)
•
•
• Dim lngUltimaCelda As Long
• If WorksheetFunction.CountA(Cells) > 0 Then
• lngUltimaCelda = Cells.Find(What:="*", After:=[A1], _
• SearchOrder:=xlByRows, _
• SearchDirection:=xlPrevious).Row
• MsgBox lngUltimaCelda
• End If
• Encontrar última fila (en columna especificada)
•
•
• Dim intUltimaFila As Range
•
• If WorksheetFunction.CountA(Columns(1)) > 0 Then
• Set intUltimaFila = Range("65536").End(xlUp)
• MsgBox intUltimaFila.Address
• End If
• Suprimir filas vacías
•
•
• intLastRow = Columns("A:A").Range("A65536").End(xlUp).Row
• For r = intLastRow To 1 Step -1
• If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
• Next r
• Suprimir filas vacías
•
•
• Dim intNumDeFilas As Long
•
• Selection.SpecialCells(xlCellTypeLastCell).Select
• intNumDeFilas = Selection.Row
• For i = 1 To intNumDeFilas
• If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
• Rows(i).Delete
• End If
• Next
• Suprimir filas vacías
•
•
• intUltimaFila = _
• ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
• For r = intUltimaFila To 1 Step -1
• If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
• Next r
• Suprimir filas por condición
•
•
• Dim rngString As Range
•
• Do
• Set rngString = Cells.Find("Aglis", MatchCase:=False, _
• LookAt:=xlPart, LookIn:=xlValues)
• If Not rngString Is Nothing Then
• rngString.EntireRow.Delete
• End If
• Loop Until rngString Is Nothing
• Suprimir filas vacías por dos condiciónes X, Y
•
•
• For i = intUltimaFila To 1 Step -1
• Let strTest= Application.Cells(i, 2)
• If strTest <> "X" And strTest <> "Y" Then Rows(i).Delete
• Next i
•
Procedimientos
Vamos a necesitar tres sencillas macros.
1. StartTemporizador - Iniciar el temporizador
2. Tu_Sub - Cualquier instrucción
3. StopTemporizador - Cerrar el temporizador
Luego hacen falta dos botones en la hoja, uno para la macro StartTemporizador, y otro
para la StopTemporizador.
Declaraciones
Por encima de las macros descritas abajo, hacemos las declaraciones.
Iniciar temporizador
La primera macro inicia el temporizador.
Sub StartTemporizador()
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Tu procedimiento
Aquí pones lo que quieres que Excel haga periodicamente.
Sub Tu_Sub()
StartTemporizador
End Sub
Cerrar temporizador
El temporizador hay que cerrarlo 'manualmente'.
Sub StopTemporizador()
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
Todo el código
Ahora, el módulo de las macros descritas arriba debe tener el siguiente aspecto.
Sub StartTemporizador()
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Sub Tu_Sub()
'reiniciar el temporizador
StartTemporizador
End Sub
Sub StopTemporizador()
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
Con el método WAIT puedes hacer que un formulario se cierre después de un tiempo
determinado. Esto puede ser útil para presentar información al usuario ('La importación
ha terminado con éxito', 'El archivo está guardado' etc). El truco está en utilizar el
método WAIT de VBA.
Procedimiento
Crea un formulario 'frmMensaje' con el mensaje que quieres que aparezca. Añade este
código al formulario. El ejemplo nos dice que la rutina se va a esperar ('Wait') hasta la
hora
Now + TimeValue("00:00:04")
Es decir la hora actual más 4 segundos.
Sub Importar_Access()
frmMensaje.Hide
End Sub
frmMensaje.Show
frmMensaje.Show
End Sub
Un ejemplo de una macro VBA de como crear una barra de progreso (progress bar) para
incluir en nuestras aplicaciones y plantillas Excel.
De esta forma podemos añadir un medidor de progreso gráfico a la barra de estado de
Excel.
El código
Option Explicit
Sub BarraDeProgreso()
Dim R As Integer
Dim MT As Double
For R = 1 To 180
MT = Timer
Do
DoEvents
Next R
Application.StatusBar = False
End Sub
Sub Reloj()
Range("A1").Formula = "=NOW()"
End Sub
Sub auto_Open()
Call Reloj
End Sub
= HORA("A1")
= MINUTO("A1")
= SEGUNDO("A1")
Redondear celdas
z = Round(Cell, 2)
Cell.Value = z
Cell.NumberFormat = "#,##0.00"
Next Cell
Formatear fuente
Cells.Select
With Selection.Font
.Size = 10
End With
Líneas de división
ActiveWindow.DisplayGridlines = False
Indice de colores
ActiveWorkbook.Colors(44) = RGB(236, 235, 194) 'verde
Colorear rango
Range("A1:B10").Interior.ColorIndex = 44
Por desgracia, a muchos de nosotros los colores de la hoja Excel predefinidos por
Microsoft parecen bastante fuertes, y a veces hacen que la hoja sea difícil de leer.
Los colores forman parte del diseño del libro, son importantes para una buena
presentación de un informe. Pero por regla general tampoco se debe pasar utilizando
demasiado color.
Para cambiar entre RGB y HEX necesitamos un Conversor RGB <> HEX.
Selection.Interior.ColorIndex = 40
Selection.Interior.ColorIndex = _
xlNone/xlColorIndexAutomatic/xlColorIndexNone
ActiveWorkbook.ResetColors
ActiveWorkbook.Colors = Workbooks("C:\MiLibroDeColores.xls").Colors
i = Cells(1, 1).Interior.ColorIndex
MsgBox i
Item.Interior.ColorIndex = 44
End If
Next
En este ejemplo buscaremos en una lista de apellidos. En el ejemplo abajo, "Aban" nos
devuelve dos apellidos. Otro ejemplo sería 'queiro", c ual nos devolvería Abanquiero.
Preparamos la hoja
En celdas C5:C12 tenemos la lista en que buscar (celdas D5:D12 también pertenecen a
la matriz.
En celdas G5:H5 el programa pondrá la lista "filtrada", allí no tienes que introducir
nada.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R)
algo como "ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Buscar_Texto_En_Lista()". Marca esta, y "Ejecutar".
Código
Sub Buscar_Texto_En_Lista()
'dimensiones
Range("G5:H4000").ClearContents
lngColumna = 2
lngFila = 5
lngUltimaFila = Columns(lngColumna). _
Range("A65536").End(xlUp).Row
lngPegarColumna = 6
lngPegarFila = 5
'objeto a buscar
strObjetoBuscar = Range("G2").Text
'minúsculas
strObjetoBuscar = LCase(strObjetoBuscar)
'evaluación
strObjetoBuscar, vbTextCompare)
'copiar/pegar
Range( _
Cells(lngPegarFila, lngPegarColumna), _
.Select
ActiveSheet.Paste
lngPegarFila = lngPegarFila + 1
End If
Next n
'aparcar
Application.CutCopyMode = False
Range("G2").Select
99:
End Sub
No siempre se sabe de antemano que celdas formarán parte del rango a sumar. Entonces
tenemos que expresar el rango de forma variable.
En Excel es fácil sumar este rango mediante una sencilla fórmula. Pero VBA no
contiene ninguna función igual. Entonces hay que hacer que VBA utilice las funciones
de Excel.
Application.WorksheetFunction.Sum(varSuma)
De esta manera puedes aplicar cualquier fórmula de Excel en VBA, con tal de que
empieces la línea de código con
Application.WorksheetFunction...
Nuestro ejemplo
En este ejemplo el rango que nos interesa sumar son los valores correspondientes a
"BB", es decir C8:C13.
'sumar el rango
Cells(1, 1) = Application.WorksheetFunction.Sum(varSuma)
'sumar el rango
SUMA = Application.WorksheetFunction.Sum(varSuma)
Si los datos que tenemos que guardar son pocos, conviene guardarlos en un archivo
Ascii en vez de una base de datos 'de verdad' como Access.
Hay que tener un cuenta que los datos guardados en archivos Ascii ocuparán más
espacio que en una base de datos de verdad. Pero para guardar hasta unos mil líneas de
texto no hay problema ninguno.
Comando OPEN
El OPEN nos hace posible crear/abrir un archivo de texto, para luego proceder a escribir
a este archivo.
Output
Abrir (o crear) el archivo (suprime todo ya grabado) para escribir. Es decir que, si el
archivo existe, borrará todo los datos ya grabados.
Append
Input
Comando PRINT
El PRINT se emplea para la forma sequencial (posiciones fijas) = 'tal como está'. En los
ejemplos abajo utilizaremos el comando PRINT.
Comando WRITE
El WRITE se utiliza para la forma sequencial CSV (Comma Separated Value - Valor
separado por coma). Esto significa que añadirá una coma entre cada bloque de texto.
Esto ayuda a la hora de importar un archivo Ascii a Excel.
Ejemplo: Print #f, "Fecha de hoy: " & Date ; " Application.UserName
Cada bloque de texto se delimita del próximo por el carácter ';'.
Sub Crear_Escribir_ArchivoAscii()
Dim f As Integer
strNombreArchivo = "MiArchivoAscii.txt"
strRuta = "C:\"
f = FreeFile
Close f
End Sub
Sub Crear_Escribir_ArchivoAscii()
Dim f As Integer
strNombreArchivo = "MiArchivoAscii.txt"
strRuta = "C:\"
f = FreeFile
'escribimos al archivo
Print #f, "Fecha de hoy: " & Date
Close f
End Sub
Sub Leer_ArchivoAscii()
Dim f, i As Integer
strNombreArchivo = "MiArchivoAscii.txt"
strRuta = "C:\"
f = FreeFile
i = 1
Cells(i, 1) = strTexto
i = i + 1
Wend
Close f
End Sub
Las messagebox son muy útiles (y fáciles de usar), y crea una interfaz entre el usuario y
el programa. Sirven para
Respuesta = Msgbox("Mensaje", _
Botones/íconos, "Título")
Mensaje
Cualquier tipo de texto. Para crear un salto de línea empleamos el carácter vbCrLf.
Actualización terminada:" & vbCrLf & _
Botones
Si quieres puedes añadir cualquier de estos cuatro botones (si no pones nada Excel te
pondrá vbOkOnly por defecto).
vbOkOnly
vbOkCancel
vbYesNoCancel
vbAbortRetryIgnore
Íconos
vbCritical
vbQuestion
vbExclamation
vbInformation
Título
Cualquier texto.
Devolver información
Si quieres que el programa utilice la respuesta del usuario, estas son las cifras que te
devuelve.
Ok = 1
Cancel = 2
Abort = 3
Retry = 4
Ignore = 5
Yes = 6
No = 7
Ejemplos
Te ponemos unos ejemplos módelo para que te vayas acostumbrando a las diferentes
messagebox.
Sub MessageBox()
vbOKOnly, "Información"
End Sub
Sub MessageBox()
"Información importante"
End Sub
Sub MessageBox()
If intRespuesta = 6 Then
msgbox "Seguimos"
Else
msgbox "Terminamos"
End If
End Sub
Sub MessageBox()
End Sub
Sub MessageBox()
vbCrLf & _
, vbExclamation + vbOKOnly, _
"Actualización terminada."
End Sub
Tarea
Queremos un programa que nos calcule los dígitos de control de una cuenta.
Un ejemplo de cuenta
0123 - 4567 - xx - 0123456789
Entidad 0123
Oficina 4567
Dígitos de control xx
Cuenta 0123456789
Empezamos
Abrimos un libro nuevo. Formateamos las celdas B3:E3 a TEXTO.
Crear el módulo
Entra a Herramientas - Macros - Editor VBA. A la izquierda ves (si no lo ves CTRL+R)
algo como "ProyectoVBA (Tu libro). Marca ese proyecto. Insertar - Módulo.
El código
Sub DC_check()
Dim DC As String
'---------------------------------------------------
Bank = Range("B3").Text
Office = Range("C3").Text
DC = Range("D3").Text
Account = Range("E3").Text
'---------------------------------------------------
'evaluar DC (1)
Valor1 = (Mid(BankOffice, 1, 1) * 4)
Valor2 = (Mid(BankOffice, 2, 1) * 8)
Valor3 = (Mid(BankOffice, 3, 1) * 5)
Valor5 = (Mid(BankOffice, 5, 1) * 9)
Valor6 = (Mid(BankOffice, 6, 1) * 7)
Valor7 = (Mid(BankOffice, 7, 1) * 3)
Valor8 = (Mid(BankOffice, 8, 1) * 6)
TestValue1 = 11 - TestValue1
'evaluar DC (2)
Valor1 = (Mid(Account, 1, 1) * 1)
Valor2 = (Mid(Account, 2, 1) * 2)
Valor3 = (Mid(Account, 3, 1) * 4)
Valor4 = (Mid(Account, 4, 1) * 8)
Valor5 = (Mid(Account, 5, 1) * 5)
Valor7 = (Mid(Account, 7, 1) * 9)
Valor8 = (Mid(Account, 8, 1) * 7)
Valor9 = (Mid(Account, 9, 1) * 3)
TestValue2 = 11 - TestValue2
'---------------------------------------------------
'evaluar DC completo
If TestValueDC = DC Then
Test = True
MsgBox "Correcto."
Else
Test = False
"[en este caso DC sería " & TestValueDC & ".]", vbOKOnly,
vbInformation
End If
'---------------------------------------------------
End Sub
Ejecutar macro
Para ejecutar esta macro entras a Herramientas - Macros. Allí encontrarás la macro
"Conectar_Excel_ADO". Marca esta, y "Ejecutar".
Resumen
Si tu pc está equipado con módem podrás realizar llamadas desde Excel, teniendo el
número en una lista.
A través de una API (instrucción Windows) podemos hacer que Excel arranque el
Marcador Telefónico.
Para usar tienes que marcar la celda con el nº, y luego dar marcar.
Configuraciones
Hay una parte del código, que se puede configurar, por si alguien quiere llamar desde un
lugar donde se trabaja con una central telefonica. Generalmente para tomar una linea te
pide que marques el (0).
El código
'Jose Skraviuk
'ayudaexcel@yahoo.com.ar
Option Explicit
lRetVal = tapiRequestMakeCall(Trim$(sNumber), _
End If
End Sub
strNombre = ActiveCell.Value
End Sub
• Inicio
• Mapa
• General
• Formatos
• Atajos
• Fórmulas
•
Resumen
Un bonito ejemplo de como usar el evento Change, para proporcionar ayuda acerca de
la celda seleccionada.
Este truco Excel permite proporcionar ayuda en línea al usuario, acera de la celda
seleccionada. Esto puede resultar útil a la hora de construir formularios (no los de VBA,
sino los formularios a rellenar de toda la vida...) en una hoja Excel.
El código
'Jose Skraviuk
'ayudaexcel@yahoo.com.ar
Else
Range("ayuda") = ""
If ActiveCell = Range("D5") Then
Else
Range("ayuda") = ""
End If
End If
End Sub
Resumen
Se usa el evento change para simular una casilla de verificación, en la columna A, y
luego combinamos con una suma condicional, que que solamente SUMA los meses que
se encuentran tildados.
Un ejemplo real
Al hacer clic sobre la columna A, tilda la celda.
Luego se puede aplicar una fórmula matricial y condicional para sumar los meses
tildados.
{=SUMA(SI($A$2:$A$13<>"";$C$2:$C$13;0))}
El código
'Jose Skraviuk
'ayudaexcel@yahoo.com.ar
Application.EnableEvents = False
If Not Application.Intersect _
If Target.Column = 4 Then
aOffset = 3
Else
aOffset = 2
End If
If IsEmpty(Target.Value) Then
With Target
.Font.Name = "Wingdings"
.Value = Chr(252)
End With
Target.Offset(0, iOffset).Select
Else
Target.Value = ""
Target.Offset(0, iOffset).Select
End If
End If
err_handler:
Application.EnableEvents = True
End Sub
Comentarios
Para evitar confusiones (sobre todo si estamos preparando una plantilla para otras
colegas), podríamos optar por la fórmula SUMAPRODUCTO, que además permite
aplicar varias condiciones de una manera fácil. / Anders J.
=SUMAPRODUCTO((A2:A13<>"")*C2:C13)
Explorador de informes
• José Skraviuk | 8/09/2006
Instrucciones
Encontrarás un ejemplo real del
Explorador de archivos Excel aquí
Para ver el código utilizado, combine las siguientes Teclas:ALT + F11.
Aquí explicamos cómo importar una tabla de una base de datos Access, a una hoja
Excel.
Esta maniobra también puede realizarse desde los menús del propio programa Access.
¿Pero qué pasa si tenemos que acceder a un archivo Access, y no tenemos el programa
Access instalado? Entonces podemos recurrir al código VBA, y programar una macro.
El código
Sub Importar_Access()
'dimensiones
Dim i As Long
strTabla = "salarios_2003"
'crear la conexión
'consulta SQL
lngCampos = recSet.Fields.Count
For i = 0 To lngCampos - 1
Next
'desconectar
End Sub
Objetos utilizados
Para contactar con Outlook desde Excel podemos utilizar el objeto GetNameSpace de la
MAPI - Messaging Application Programming Interface.
Luego, el método GetDefaultFolder nos deja acceder a las carpetas de Outlook, por
ejemplo el de los Contactos.
Parámetro Carpeta
3 Deleted Items (Elementos elimindos)
4 Outbox (Bandeja de salida)
5 Sent Items (Elementos enviados)
6 Inbox (Bandeja de entrada)
9 Calendar (Calendario)
10 Contacts (Contactos)
11 Journal (Diario)
12 Notes (Notas)
13 Tasks (Tareas)
16 Drafts (Borrador)
El código
Sub ImportarContactos()
Dim i As Integer
Set olContacts =
olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
'rotulos
Cells(1, 1) = "Nombre"
Cells(1, 2) = "E-mail"
Cells(1, 3) = "Título"
Cells(1, 4) = "Empresa"
For i = 2 To olContacts.Items.Count
Cells(i, 1) = olContact.FullName
Cells(i, 2) = olContact.Email1Address
Cells(i, 3) = olContact.JobTitle
Cells(i, 4) = olContact.CompanyName
Cells(i, 5) = olContact.HomeTelephoneNumber
Cells(i, 6) = olContact.MobileTelephoneNumber
Cells(i, 7) = olContact.BusinessTelephoneNumber
Cells(i, 8) = olContact.BusinessFaxNumber
Cells(i, 9) = olContact.BusinessAddressStreet
End If
Next
End Sub
Resumen
Este truco sirve para enviar una hoja Excel por mail, utilizando Outlook u otro sistema
de correo instalado en el ordenador del usuario.
El código
'Jose Skraviuk
'ayudaexcel@yahoo.com.ar
Sub Mail_ActiveSheet()
Dim wb As Workbook
Application.ScreenUpdating = False
ActiveSheet.Copy
Set wb = ActiveWorkbook
With wb
.ChangeFileAccess xlReadOnly
Kill .FullName
.Close False
End With
Application.ScreenUpdating = True
End Sub
strEmail = "aaa.bbb@ccc.com"
Esto significa que debemos incluir trozos de código SQL en nuestra programación VBA
para poder realizar esta tarea.
¿Qué es SQL?
SQL (Structured Query Language o Lenguaje de consultas estructurado) es un lenguage
que se utiliza para organizar, gestionar y recuperar datos de bases de datos. Con SQL se
puede consultar bases de datos para buscar/escribir etc datos.
Surgió de IBM a finales de los años 70. Posteriormente adoptado por ANSI (American
National Standards Institute). La última version se llama SQL-99, y todas las bases de
datos comúnes son compatibles.
Ejemplo
Varchar significa que esa columna solo puede contener texto. La longitud máxima
(opcional) se puede poner entre paréntesis. Otros formatos son
DROP
Para suprimir tablas o bases de datos.
TRUNCATE
Para suprimir el contenido una tabla (y no toda la tabla en si). Puede ser muy útil de vez
en cuando.
ALTER
Para añadir/suprimir columnas en una base de datos.
Ejemplo
SELECT
Para seleccionar (devolver) datos de la base de datos.
INSERT
Para grabar nuevos registros en la base de datos.
UPDATE
Para modificar datos de una tabla.
UPDATE nombre_tabla
SET nombre_columna = nuevo valor, nombre_columna2 = nuevo valor2...
WHERE nombre_columna = un valor
DELETE
Para suprimir datos de una tabla.
FROM
Para especificar tabla de origen. Utilizado con el comando SELECT.
WHERE
Se utiliza para escpecificar condiciciones en la consulta de la base de datos. Utilizado
con el comando SELECT, más un operador y luego la condición en si.
SELECT nombre_columna
FROM nombre_tabla
WHERE nombre_columna2 operador valor
Operador Explicación
AND TRUE si dos registros cumple la condicion.
OR TRUE si uno de los registros cumple la condicion.
NOT Negación lógica. Devuelve el valor contrario.
< Menor que.
> Mayor que.
<> Distinto de.
<= Menor ó Igual que.
>= Mayor ó Igual que.
= Igual que.
BETWEEN Especificar un intervalo de valores.
GROUP BY
Para separar registros seleccionados en grupos. Interesante si quieres sumar cada
registro distinto de una columna. Si no aplicas el GROUP BY, cada suma será el total
de todos los registros, y no la suma de cada registro único.
SELECT nombre_columna1, SUM(nombre_columna2)
FROM nombre_tabla
GROUP BY nombre_columna1
ORDER BY
Para ordenar los registros.
Operador Descripción
AND TRUE si dos registros cumple la condicion.
OR TRUE si uno de los registros cumple la condicion.
NOT Negación lógica. Devuelve el valor contrario.
< Menor que.
> Mayor que.
<> Distinto de.
<= Menor ó Igual que.
>= Mayor ó Igual que.
= Igual que.
BETWEEN Especificar un intervalo de valores.
COUNT(*)
Devuelve el número de registros en una tabla.
SELECT COUNT(*)
FROM nombre_tabla
SUM
Devuelve la suma de una columna. Le parece a la función AVG arriba.
SELECT SUM(nombre_columna)
FROM nombre_tabla
SELECT SUM(ImporteRemesa)
FROM Remesas
WHERE (ImporteRemesa < 2400)
MAX
Devulve el valor más alto de una columna.
SELECT MAX(nombre_columna)
FROM nombre_tabla
MIN
Devulve el valor más bajo de una columna.
SELECT MIN(nombre_columna)
FROM nombre_tabla
Algunas veces querrás hacer consultas SQL y poner una variable como condición. Esto
se puede hacer perfectamente, solo hay que tener un poco de cuidado al formular la
ortografía de la consulta.
Ejemplo
Sacamos el salario de un empleado que especificamos en una celda de Excel, o en una
caja de texto de VBA etc. Luego convertimos este nombre a una variable llamada
Empleado
Contactar
Pueden contactar con nosotros en el siguiente buzón: info@xltoday.net
Hay bastante poco material en castellano sobre Excel y VBA en la red. Espero que este
sitio pueda ser útil para todo usuario Excel, sea cual sea su profesión. Las soluciones
Excel sirven para todo.
La construcción
(X)HTML
El sitio está escrito en XHTML, una variedad más moderna de HTML. De está manera
las páginas funcionarán en la mayoría de los navegadores modernos.
CSS
CSS (Cascading Style Sheets) acompaña el XHTML. CSS sirve para hacer una división
entre contenido y diseño (además, esto es una de las ideas fundamentales de XML).
Estándares Web
La combinación XHTML + CSS forma parte de los Estándares Web, una iniciativa de
particulares para estandardizar la producción web. Todo para mejorar para el visitante
(funcionar en distintos navegadores, cargar más rápido, navegación intuitiva...).
Este sitio intenta seguir estas recomendaciones. Por ello hemos quitado la mayoría de
las tablas HTML, cuales utilizamos solo para presentar datos tabulares (esa era la idea
principal de la tabla HTML).
Javascript
ASP y SSI
Para el resto de 'lo dinámico' del sitio empleamos ASP, Active Server Page, que reside
en el servidor, y no afecta en absoluto al visitante, y SSI, abreviación de 'Server-Side
Included'. Es otra técnica del lado del servidor para ensamblar varios trozos a una
página web completa. Un poco como los ya absoletos 'frames' de HTML, pero mucho
mejor.
El futuro
Cada documento web debe ser un documento vivo. El próximo paso para xlToday
podría ser la publicación de material de sus visitantes. Seguro que hay una variedad de
ideas y soluciones Excel entre ustedes.
Si tienes alguna sugerencia sobre este tema, textos y trucos Excel que te gustaría
publicar etc, no dudes en contactarme.
Anders
info [ a ] xltoday.net
Excel y VBA
Links sobre Exce, macros y VBA, tanto en español como en inglés.
Historia de la informática
Enlaces a sitios sobre la historia de la informática.
Varios
Enlaces sobre programación Web.
Apartado Enlace
Uno de los recursos más completos en la
W3schools
red.
HTML y CSS en español. Html.programacion
Manual muy bueno sobre CSS. Ignside
HTML, ASP, diseño web. Htmlweb
Enlaces sobre HTML y programación. La web del programador
Programación ASP en castellano. Programación
Menú Java de navegación tipo Windows. Destroydrop
Motor de búsqueda (el que nosotros
ASP Simple Search
empleamos, maravilloso)
Estadísticas para tus proyectos web. Metasun
Foro sobre ASP, desde Argentina. SoloASP
Estadísticas para proyectos web ASP Stats Generator
Apartado Enlace
Historia desde 1.820, máquinas
Historia de la informática
diferenciales de Babbage.
Nostalgia de los anos 80. Spectrum, C64,
Cacharros de 8 bits
MSX...
Maquinas gigantes: Eniac, Univac, IBM... Historia del ordenador
Repaso por las 5 generaciones de
Historia de la computación
ordenadores.
La evolución del MSX desde 1.983. Historia del nacimiento del MSX
La fantástica historia de la compañia
Commodore 64
Commodore.
Enlaces de programación en general
Apartado Enlace
Enlaces a recursos gratis. Iespana
Sobre SQL y conexiones a base de datos. Sqlmax
Para crear archivos de ayuda (CHM).
VizAcc Helpmaker
Ver ejemplo
Otros enlaces
Apartado Enlace
Encuentra amigos de todo el mundo con el mejor chat
Chat Latino
en línea.
Turismo en Canarias Information, tips and places of the Canary Islands
Tourist info and ideas for visiting the Scandinavian
Discover Scandinavia
countries.
Greece Tourist Info Greek travel information and articles on Greece.
Allergies, symptoms and
Articles on allergies and remedies.
remedies
Small Garden Fountains Small garden fountains for outdoor use