SITIO DEDICADO  SOLO A EXCEL 2007 Y EXCEL 2003, CON TUTORIALES Y EJERCICIOS  RESUELTOS DE  TODOS LOS TEMAS

NIVELES, BASICO, MEDIO Y AVANZADO

Macros

 

INTRODUCCION:

Las macros son pequeños trozos de código VBA que no deberían tener más de 15 líneas y no devuelven un valor en su nombre, como las funciones, sino que hacen tareas especificas, estas tareas muchas veces pueden realizase manualmente y otras no, en definitiva sirven para automatizar Excel. Las macros pueden vincularse entre sí mediante la palabra recervada Call y de esta forma unirse para formar códigos  mas grandes

Estos códigos por lo general se ejecutan a pedido del operador, pero también pueden hacerlo automáticamente, una forma es debido a que se produzca algún cambio en una hoja de Excel, como puede ser el cambio en el valor de una celda. A estos cambios se los denomina EVENTOS y para que se ejecuten las macros, hay que programar dichos EVENTOS.

La forma más práctica de poner en acción una macro es mediante botones asociados a ellas. Para hacerlo vamos a la pestaña programador y de allí pulsamos el botón Insertar para que se desplieguen los controles de formulario, como se ve en la figura

BOTON

 

al apretar el ícono del botón aparece una cruz, ubicamos esta cruz en el lugar que nos parece conveniente y arrastrándola, con el botón izquierdo del mouse apretado, podemos darle el tamaño adecuado. Al soltar el mouse tenemos algo parecido a esta imagen

BOTON

simultáneamente aparece un panel donde podemos seleccionar la macro que queremos asociar

 

SELECCIONAR MACRO

al aceptar ya tenemos el botón asociado a la macro, posteriormente lo podemos rotular convenientemente.

A continuacion daremos un ejemplo práctico simple:

Un banco quiere dar de baja las cuentas que no tuvieron movimientos por 3 o más años, considerándolas inactivas en dicho caso y activas en caso contrario.

El banco tiene un listado con las cuentas activas y no activas

 

LISTADO DE CUENTAS

 

Se quiere actualizar dicho listado, o sea eliminar las cuentas inactivas

Este listado tiene 14 clientes y se lo podría actualizar manualmente, pero si imaginamos que la lista tiene 5000 o más clientes, se tardaría mucho tiempo, por tal motivo es un problema para resolver con una macro.

Coloquemos la lista en la hoja 1 de un libro de Excel 2007 o Excel 2003

 

Lista en hoja

insetamos el siguiente código

CODIGO

 

Luego de de oprimir el botón que asociamos a la macro, que llamamos ActualizarListado, el listado queda

 

Listado actualizado

Código para copiar y pegar

Sub ActualizarListado()
Range("E3").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = "inactiva" Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("A1").Select
End Sub

 

Cuando se dispara una macro no hay vuelta atrás, si se borra un dato, este se pierde(a no ser que se cierre el archivo no se guarden los cambios y se lo abra otra vez). Muchas veces podemos necesitar el listado original, por ejemplo para obtener, en el caso que estamos tratando, otro con los clientes que fueron dados de baja, el que se haría con una macro casi idéntica a la dada más arriba, que dicho sea de paso la confeccionó un empleado del área de computación del banco, al que le pidieron las dos listas a último momento. Cacho (así le dicen al empleado), que por suerte no había apretado el botón ACTUALIZAR, decidió hacer las dos cosas al mismo tiempo, es decir: dejar en la Hoja1un listado con los clientes activos y en la Hoja2 los clientes dados de baja, a esta hoja la renombro "Bajas", también copio como respaldo, el listado original en la Hoja3. Cuando terminó el trabajo le quedaron las siguientes macros 

ACTUALIZAR LISTADO 2

y para el rótulo de "Bajas"

ROTULO

"CopiaRotulo" es llamada por "ActualizarListado2" mediante la palabra reservada "Call"

Las dos listas quedaron como se ve

Lista de los clientes activos

Listado actualizado 2

Lista de los clientes dados de baja

LISTA INACTIVA

Cacho pensó que después de todo, se hubiera tomado menos trabajo cerrando el archivo y abriéndolo otra vez, aunque pensándolo mejor se dijo "ya  tengo hecha la macro y seguro que la voy a volver a usar”.
Si, seguro que la iba a volver usar y esta vez todo el trabajo sería más rápido.

Macros para copiar y pegar

Option Explicit

Sub ActualizarListado2()
Dim i As Integer
Dim k As Integer
k = 1
Dim j As Integer
j = 1
Call CopiaRotulo
Sheets("Hoja1").Select
Application.CutCopyMode = False
Range("E3").Select

Do While ActiveCell.Value <> ""
If ActiveCell.Value = "inactiva" Then
Sheets("Bajas").Select
Range("E65536").End(xlUp).Offset(1, 0).Select
i = ActiveCell.Row

Range("C" & i).Value = Worksheets("hoja1").Range("C" & i + k - j).Value
Range("C" & i).Interior.ColorIndex = 24
Range("C" & i).Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("C" & i).Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("C" & i).Borders(xlEdgeTop).LineStyle = xlContinuous

Range("D" & i).Value = Worksheets("hoja1").Range("D" & i + k - j).Value
Range("D" & i).Interior.ColorIndex = 24
Range("D" & i).Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("D" & i).Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("D" & i).Borders(xlEdgeTop).LineStyle = xlContinuous
Columns("D:D").EntireColumn.AutoFit

Range("E" & i).Value = Worksheets("hoja1").Range("E" & i + k - j).Value
Range("E" & i).Interior.ColorIndex = 24
Range("E" & i).Borders(xlEdgeBottom).LineStyle = xlContinuous
Range("E" & i).Borders(xlEdgeLeft).LineStyle = xlContinuous
Range("E" & i).Borders(xlEdgeTop).LineStyle = xlContinuous
Range("E" & i).Borders(xlEdgeRight).LineStyle = xlContinuous

j = j + 1
Range("A1").Select
Sheets("Hoja1").Select
Selection.EntireRow.Delete
Else
k = k + 1
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("A1").Select
End Sub

Option Explicit

Sub CopiaRotulo()
Range("C2:E2").Select
Selection.Copy
Sheets("Bajas").Select
Range("C2").Select
ActiveSheet.Paste
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit

End Sub

Nos podríamos preguntar de donde se sacó la tabla que uso Cacho, bueno, esta es realidad una base de datos de la cual se ha obtenido la que tiene el rótulo  “ESTADO”  (cuenta activa, cuenta inactiva). La BASE DE DATOS se obtiene de los FORMULARIOS que tenemos que llenar cuando decidimos sacar una cuenta corriente en un banco

Este es un modelo real de formulario para la solicitud de una cuenta bancaria de una empresa

formulario

De la misma manera, una empresa, podría generar su propia BASE DE DATOS de clientes, recurriendo a la capacidad que tiene Excel para generar FORMULARIOS, o podríamos crear un directorio telefónico y esto es justamente lo que haremos en el próximo ejemplo de macros pero sin recurrir a los formularios, tema que dejaremos para despues..

En adelante, como se vio en caso del empleado del banco (Cacho), procuraré presentar casos de la vida cotidiana, con los que se puede encontrar el empleado de una empresa, o de una pyme, situaciones con las que frecuentemente se ven involucrados profesionales de cualquier orientación o de un usuario que en realidad no sabe que esta frente a una aplicación Excel

EJEMPLOS PRACTICOS DE MACROS Y CODIGO VBA

DIRECTORIO TELEFONICO

Se puede encarar el problema anterior usando formularios, este método tiene la desventaja de que el código se complica un poco, lo que no debería sorprendernos ya que una celda es un objeto mas simple, pero como veremos, las ventajas superan a las desventajas

DIRECTORIO TELEFONICO ( USANDO FORMULARIOS)

 

CONSULTA EN UNA LIBRERIA

 

CONSULTA EN UNA LIBRERIA (USANDO FORMULARIOS)

 

TICKET DE COMPRA

 

COMBOBOX (CUADRO COMBINADO) ORDENADO ALFABRTICAMENTE

 

ALTAS, BAJAS Y MODIFICACIONES

 

INFORMES

 

 

 

 

 

 

 

 

 

Copyright © 2009. Diseño CésarDesign
Free Web Hosting

http://www.000webhost.com/