Está en la página 1de 82

EXCEL

VBA

Guía para principiantes paso a paso del lenguaje de
programación de Excel





Jason Jay

© Copyright 2017 de Jason Jay - Todos los derechos reservados.

Si desea compartir este libro con otra persona, por favor, compre una
copia adicional para cada destinatario. Gracias por respetar el duro
trabajo de este autor. De lo contrario, la transmisión, duplicación o
reproducción de cualquiera de los siguientes trabajos, incluida
información específica, se considerará un acto ilegal
independientemente de si se hace por medios electrónicos o impresos.
Esto se extiende a la creación de una copia secundaria o terciaria de la
obra o una copia grabada y sólo se permite con el consentimiento
expreso por escrito del editor. Todos los derechos adicionales
reservados.
Tabla de Contenido
EXCEL VBA 1
Introducción 5
Capítulo 1 7
La Ficha Desarrollador 7
Cuestionario 1 9
Capítulo 2 10
Macros 10
Crear una Macro 10
Referencias Relativas 12
Ejecutar la Macro 12
Grabar un Libro con Macros Habilitadas 13
Cuestionario 2 15
Capítulo 3 17
Empezando con VBA 17
¿Qué tal si necesito llenar las celdas hasta A100? 20
Insertar un Botón de Formulario 21
Cosas simples que una Macro no puede hacer. 22
Insertar un botón ActiveX 22
¿Cúal es la ventaja de declarar variables como byte, integer o cualquier
otra? 29
Rendimiento de Aplicaciones 33
MSGBOX 35
If y Select Case 36
Cuestionario 3 40
Capítulo 4 42
Proyecto: Crear una calculadora Simple usando ActiveX 42
¿Qué es un Modulo? 42
¿Cómo crear un modulo? 43
¿Sumar letras? 53
Cuestionario 4 54
Capítulo 5 55
Proyecto: Calculadora usando un Formulario 55
Repaso 55
FORMAS 56
Código de Commmand Buttons 59
Formulas de Excel en VBA 66
Combinar VBA con una Hoja de Calculo 68
Empezando con Declaraciones: 70
Declaraciones Open y Close: Mostrar un formulario sin mirar ninguna hoja
de cálculo. 73
Seguridad de Macros 78
Comentarios 80
El Código Completo del Proyecto Calculadora 84
Orden de los comandos 90
Añadir una contraseña a tu Código VBA. 91
Cuestionario 5 93
Interactuando con otras aplicaciones 94
Abrir otras aplicaciones desde Excel 94
Envíar un correo de Outlook desde Excel: 96
Respuestas de cuestionarios 99





Introducción

Introducción
Si ya sabe cómo usar Microsoft Excel, pero hay algunas cosas que no
puede hacer, es hora de aprender la funcionalidad más fuerte que tiene, Visual
Basic para Aplicaciones (VBA).
Visual Basic para Aplicaciones es un lenguaje de programación
incorporado en Microsoft Excel, Access, PowerPoint e incluso Word, que le
permiten hacer todo lo que ya sabe sobre ellos y mucho más. Por ejemplo, desea
que cada vez que abra un archivo específico de Microsoft Word, escriba
automáticamente la fecha actual dos líneas debajo de donde lo dejó la última
vez. O tal vez usted quiere una hoja de cálculo completa de Excel sin fórmulas
en él y que todavía se apliquen como si estuvieran allí. ¿Cómo lo haría usted?
Todas estas cosas y mucho más se hacen con Visual Basic para Aplicaciones
para Microsoft Office.
Mire el siguiente ejemplo:.

Parece un programa hecho para el análisis, y lo es. ¿Adivina qué programa es?
Probablemente usted está pensando que no es ningún programa de Microsoft
Office, pero déjeme decirle que se hizo con Microsoft Excel, ¿cómo harías algo
así sin programación? ¡No hay forma!
Aprenderás mucho más que eso y podrás crear tus propios programas usando
Visual Basic para Aplicaciones (VBA).
¡Si necesita un programa muy específico para su análisis de negocio, algo para
uso personal, o simplemente para divertirse, necesita Visual Basic para
Aplicaciones ahora!


Capítulo 1
La Ficha Desarrollador

Cada lenguaje de programación tiene similitudes entre sus fundamentos.
Las funciones IF, Then, Loop, Close, Open, son sólo algunas de ellas. Primero
aprenderemos las básicas; Será necesario entender cómo funciona VBA.
Utilizaremos Microsoft Excel 365 para estas instrucciones y ejemplos, sin
embargo, desde Microsoft Excel 2007 en adelante funcionará igual.

Accediendo a la ficha Desarrollador

Microsoft Excel no muestra la pestaña de Desarrollador de forma
predeterminada. Sólo tiene Archivo, Inicio, Insertar, etc., pero no hay
ninguno llamado Desarrollador. Para Para acceder a esta pestaña hay
diferentes opciones, pero vamos a mostrar la más fácil.
1. Haga clic con el botón derecho del ratón en la cinta de opciones
(cualquier parte dentro del cuadro rojo, excepto los botones).


1. Selecciona Personalizar la cinta de opciones
2. Active la casilla de verificación Desarrollador y haga clic en el botón
Aceptar.


3. Deberías ver la pestaña de Desarrolador ahora.



Cuestionario 1


1. ¿Cómo accedes a la pestaña Desarrollador?

a) Está disponible por defecto.


b) Haga clic con el botón derecho en la cinta de opciones, personalizar


la cinta de opciones, active la casilla de verificación para desarrollador


y acepte.
c) Ve a archivo, Opciones, Avanzadas y Habilitar la Cinta de

desarrollador.




Capítulo 2
Macros

Crear una Macro
Verás algunas opciones disponibles en la pestaña de
desarrollador, ahora comenzaremos a utilizar el botón Grabar macro.
Una macro es una secuencia automatizada que se aplicará cada
vez que la reproduzca. Veamos un ejemplo práctico de ello:
Imagine que en su trabajo usted hace el mismo proceso cada
mañana. Toma un tiempo valioso e incluso te estás aburriendo de ello.
El proceso es el siguiente: Recibes un archivo de Microsoft
Excel de tu jefe con algunos datos y necesitas escribir la fecha usando
Año, Mes y Día en diferentes columnas.
Haces esto porque es el formato que tu trabajo necesita y has
estado agregando los mismos valores todos los días durante algunos
años.
En este caso, un proceso semi-automatizado sería útil. Excel da
esa opción a todos nosotros con macros. Una macro es un proceso
semi-automatizado que le permite ejecutar una tarea específica
mediante un acceso directo.
Para crear una Macro, siga la siguiente secuencia:

a) Haga clic en el botón Grabar un Macro.


b) Escribe un nombre para tu Macro. (Necesario)

c) Un atajo el cual ejecuta la Macro cada vez que lo pulse. Tenga


cuidado, no agregue Ctrl + C o Ctrl + v, de lo contrario no va a copiar


o pegar más, sino ejecutar la Macro. En caso de que desee un acceso
directo más específico, mantenga pulsada la tecla Mayús mientras
pulsa una letra. Por ejemplo, ctrl + shift + c. Para que funcione, no
presione ctrl mientras agrega un atajo. (Opcional)
d) Almacenar Macro en: Libro de trabajo personal: Estará disponible

para todos los archivos que abra con Excel en ese equipo; Nuevo libro:
estará disponible sólo para un nuevo archivo. Este libro: sólo se
aplicará al archivo abierto actual. (Necesario elegir uno)
e) Escribe una descripción acerca de lo que hace la Macro. (Opcional)

f) Has clic en Aceptar.


g) Empieza a hacer todo lo que siempre haces, lo que sería añadir la


fecha actual en este caso.

h) Una vez que termine, vuelva al Botón Grabar una Macro, que ahora

se llama Detener Grabación. Presiónelo y ahora debe estar guardado.


Esto sería una macro muy simple, agrega solamente la fecha actual, pero qué
pensaría si usted también necesita importar datos de una página de Internet que
se actualiza cada hora, y necesita clasificarla usando algunas algunas tablas, y
usted hace el mismo proceso varias veces al día. Sin duda, una buena Macro
sería útil.
El proceso para obtener cualquier Macro, es el mismo que hemos seguido. Sólo
hay una cosa importante a considerar al crear una, es elegir entre usar referencias
relativas o no.

Referencias Relativas
El botón referencias relativas está justo debajo del botón Grabar una
Macro. Una vez que haga clic en él, permanece activo hasta que haga
clic en él de nuevo. Se utiliza para registrar macros en las que el
proceso debe ser aplicado a diferentes rangos en lugar de uno ya
establecido.
Su funcionalidad es muy útil. Una macro grabada sin referencias
relativas siempre repetirá el proceso en las mismas celdas utilizadas
cuando se grabó. Pero si utiliza referencias relativas, la macro se
ejecutará desde la celda activa. Utilizando el ejemplo anterior, ¿qué tal
si necesita las fechas escritas en celdas F4: H4 en lugar de B2: D2? Lo
único que debe hacer es seleccionar F4 y ejecutar la Macro. O
seleccione cualquier celda que necesite y ejecútela. Pero usted necesita
grabar la macro usando referencias relativas, y después seleccionar la
celda y ejecutarla, de lo contrario no funcionaría.

Ejecutar la Macro
Hay muchas maneras de ejecutar una macro. Vamos a ver la primera:
Ejecuta ésta haciendo clic en el botón Macros, a continuación, haga clic en ella
para ejecutarlo.
Tal vez no sea tan práctico como esperábamos, sin embargo, agregaremos más
funciones y haremos que sea más fácil de ejecutar en el siguiente paso.

Grabar un Libro con Macros Habilitadas
Una vez que haya agregado algunas macros a su hoja de trabajo e intente
guardarlo, obtendrá una notificación como la siguiente:



Esto podría ser un poco confuso, porque la mayoría de la gente intentaría
guardar el archivo sin leer esta notificación:
Las siguientes características no se pueden guardar en libros de trabajo sin
macros:
° Proyecto VBA
Para guardar un archivo con estas características, haga clic en No y elija un
archivo habilitado para macros en la lista Tipo de archivo.
Para continuar guardando como un libro libre de macros, haga clic en Sí.
La mayoría de la gente simplemente hace clic en Sí y, de acuerdo con este
mensaje, no guardaría el archivo con sus macros, sino como Libre de Macros.
Eso te haría perder todo tu trabajo de las Macros.
Para guardar la macro, haga clic en No y, a continuación, seleccione guardar
como libro de Excel con Macro habilitadas.
Haga Clic en guardar y listo!
Una vez que lo abra de nuevo, debería ver un mensaje diciendo Macros han sido
deshabilitados, y un botón que dice Habilitar macros. Haga clic en él y no tendrá
más problemas. Si no hace clic en él, no podrá trabajar con VBA, al menos hasta
que los habilite en Seguridad de macros en la pestaña de desarrollador o siga los
pasos del Capítulo 5: Seguridad de macros.





Cuestionario 2


1. ¿Qué es una Macro?

A) Es una fórmula Excel


B) Es un atajo del teclado que ejecuta un proceso grabado.
C) Es un proceso incorporado por defecto en Excel.


2. ¿Cómo crear una Macro?

A) Haciendo clic en el botón de Visual Basic


B) Hacer clic en el botón Macros
C) Haciendo clic en el Botón Grabar una Macro


3. ¿Para qué son las Referencias Relativas?

A) Es para Grabar una Macro sin establecer celdas específicas.


B) Es para Grabar una Macro con celdas específicas.
C) Sin ella, una Macro no es editable.


4. ¿Cómo ejecutar una Macro?

A) Haciendo clic en el botón Macro


B) Haciendo clic en el Botón Grabar una Macro
C) Haciendo clic en el botón referencias relativas


5. ¿Cómo guardar un libro con Macros?

A) Sólo guarda el archivo normalmente, las macros se guardarán.


B) Recibirá una notificación, la cual deberíamos negar y luego
seleccionar guardar como libro de trabajo habilitado para macros.
C) Recibirá una notificación, en la que se nos dirá que estamos
guardando un libro habilitado para Macro, luego solo aceptamos
guardar.




Capítulo 3
Empezando con VBA

Las macros son fundamentales para introducirse en VBA.
Veamos por qué con el siguiente proceso:
1.-Crear una nueva Macro sin referencias relativas.
2.-En el proceso seleccione la celda A1, escriba un número 1 y
presione enter.
3.-Deje de grabar.

Junto al botón Grabar macro, hay otro llamado Visual Basic. Haga clic en
él y verá un código como este:
Range("A1").Select
ActiveCell.FormulaR1C1 = "1"
Range("A2").Select

Enhorabuena, tienes un código de Visual Basic ahora. Significa
unos pocas ordenes:
Seleccione la celda A1
Escriba el número 1
Seleccione la celda A2
Es exactamente lo que hicimos. Pero ahora, editaremos el
código para que la Macro haga otra cosa.

Si vemos, hay un patrón, que es: seleccionar, escribir, seleccionar. Por lo
tanto, podríamos continuar el patrón agregando algunas cosas más directamente,
como esto:
Range("A1").Select
ActiveCell.FormulaR1C1 = "1"
Range("A2").Select
ActiveCell.FormulaR1C1 = "2"
Range("A3").Select
ActiveCell.FormulaR1C1 = "3"
Range("A4").Select

Ahora que ha agregado esto, ejecute la macro, pero ahora verá una segunda
forma de ejecutarla. Presione el botón verde encima del código. Una vez que
haga clic en él, vaya a la hoja de cálculo de Excel haciendo clic en el símbolo de
Excel. Verá que las celdas A1: A3 están llenas de los números que escribimos y
se selecciona la Celda A4.


Puede parecer muy complejo, y es así porque los seres
humanos requieren hacer cosas que las máquinas no. Necesitaba
seleccionar la célula A1, A2, A3 y así sucesivamente. Pero, ¿realmente
necesita seleccionar para escribir un simple número?
Vamos a probarlo añadiendo el siguiente código:
Range("A1") = 1
Range("A2") = 2
Range("A3") = 3

¡Eso es! Excel puede saltar pasos que los humanos no pueden. Por lo
tanto, hace mucho más rápido y fácil su trabajo.

¿Qué tal si necesito llenar las celdas hasta A100?
Ahora, creo que si necesito seguir este patrón hasta A100 va a
ser difícil. ¿Que debería hacer?
Vamos a añadir esto:
Range("A1:A100") = 1

¡Vaya! Agrega un número 1 a todas las celdas de A1 a A100. Intentemos
otra cosa:
Range("A1:A100") = 1 + 1

Añade un número dos en su lugar. Entonces, ¿Cómo puedo decir a Excel
que quiero que llene las celdas en secuencia?
Hay varias formas. Uno es grabar una macro y durante el proceso agregar
un número 1 a la celda A1, a continuación, mantenga pulsado el botón derecho
del ratón sobre el pequeño cuadrado y desplácese hacia abajo hasta seleccionar
A100. Seleccione relleno en serie. Vaya a Visual Basic y verá un código como
este:
Range("A1").Select
ActiveCell.FormulaR1C1 = "1"
Selection.AutoFill Destination:=Range("A1:A100"),
Type:=xlFillSeries
Range("A1:A100").Select

¡Funciona! Creo que ya tenemos una gran idea acerca de cómo obtener el
código VBA que queremos. Grabar una Macro, y ahí está. Sin embargo, hay
muchas funciones que las macros no pueden ofrecer. Por ejemplo, rellenar las
celdas en secuencia de acuerdo con el número escrito en la celda B2, y una vez
que lo cambiemos llene la secuencia de nuevo de acuerdo con ese número. Por
lo tanto, si hay un número 1 será llenado uno por uno, si lo cambio a cinco, va a
ir cinco por cinco y así sucesivamente. ¿Cómo vas a grabar eso en una Macro?
¿Qué pasa si no es sólo el llenado de una secuencia, pero un asunto financiero,
trabajar con números reales o que necesita resolver un problema como este
rápido? Grabar una Macro no es suficiente siempre, pero en la mayoría de los
casos, ayuda.
Visual Basic Application (VBA) es un lenguaje de
programación, pero no es necesario conocer el código VBA o la
programación de computadoras la grabadora de Macros hace lo que
quiere.
Usted debe saber que cuando graba una Macro registra incluso sus
errores, y los repetirá cuando lo ejecute. Si desea resolver un problema como
este, tiene dos opciones:

1. Grabar la Macro otra vez.
2. Editar el Código VBA.

Recuerde que la grabación de una buena macro o escribir un buen código VBA,
hará Excel funcionar sin problemas. De lo contrario, puede esperar un mensaje
de no responder hasta que termine o tal vez incluso podría dejar de funcionar.
Nos enfocaremos en cosas que no puedes hacer usando sólo macros grabadas.
Por lo tanto, puede averiguar qué tan poderoso es Visual Basic para Aplicaciones
en Microsoft Excel.

Insertar un Botón de Formulario
Tenemos algunas macros grabadas ahora. Pero vemos que para ejecutarlas no es
tan práctico, así que ¿qué pasa si agregamos un botón, y cada vez que lo
presionemos la macro se ejecute?
Para ello, haga clic en el botón de Insertar en la pestaña de desarrollador. Verá
que muestra dos cuadros, denominados controles de formulario y controles
ActiveX. Seleccione el botón de control de formulario, donde quiera en la hoja
de cálculo mantenga presionado el cursor y arrastre para crear el tamaño del
botón. Una vez que deje de mantenerlo presionado verá una nueva ventana en la
que podrá elegir la macro que desea que el botón ejecute. Selecciónelo y listo.
Si desea cambiar el nombre del botón, haga clic en él dos veces o haga clic con
el botón derecho del ratón, editar texto. Para mover la posición del botón,
simplemente haga clic derecho, y luego mantenga presionado el cursor y arrastre
con el clic izquierdo.

Fácil, ¿no crees?
Cosas simples que una Macro no puede hacer.
Insertar un botón ActiveX
Vamos a agregar un botón ActiveX. Para hacer esto en el Pestaña
Desarrollador, haga clic en Insertar y, a continuación, seleccione el botón
ActiveX. Mantenga pulsado y arrastre para crear el botón en la hoja de cálculo.
Este tipo de botón es muy diferente a los Botones de Formulario, ya que estos
funcionan directamente con VBA.





Vamos a agregar alguna funcionalidad que no se puede hacer utilizando
sólo macros. Queremos que el botón cree una secuencia de números de acuerdo
con el valor insertado en la celda B2. Quiero decir, si agrego el número 1, veré
un patrón que va uno por uno. Si escribo 5, entonces se van cinco por cinco, y
así sucesivamente, de A1 a A100.
Esta es una gran oportunidad para explicar Variables.

Variables, Do y Loop.
Una variable es un término algebraico, que suele representarse por una
letra y su valor varía, por ejemplo, x + y = 10, en esta ecuación hay dos
variables, X e Y. Pueden variar para igualar a 10. Si X = 5 e Y = 5 entonces x + y
= 10, y también es correcto si X = 8 e Y = 2, porque X + Y = 8 + 2 = 10. Etc.
En VBA también declaramos variables. En este caso
agregaremos alguna funcionalidad al botón ActiveX que agregamos en
el paso anterior.
En primer lugar, tendremos que elegir la variable numérica correcta.
Éstas son la mayoría de los tipos de variables, revísalos y ve su valor y
tamaño de almacenamiento por ahora:
Tipo Tamaño de Valor
Almacenamiento
Byte 1 byte 0 to 255
Boolean 2 bytes True or False
Integer 2 bytes -32,768 to 32,767
Long 4 bytes -2,147,483,648 to 2,147,483,647
(long integer)
Single 4 bytes -3.402823E38 to -1.401298E-45 for negative
(single- values; 1.401298E-45 to 3.402823E38 for
precision positive values
floating-
point)
Double 8 bytes -1.79769313486231E308 to
(double- -4.94065645841247E-324 for negative
precision values; 4.94065645841247E-324 to
floating- 1.79769313486232E308 for positive values
point)
Currency 8 bytes -922,337,203,685,477.5808 to
(scaled 922,337,203,685,477.5807
integer)
Decimal 14 bytes +/-79,228,162,514,264,337,593,543,950,335
with no decimal point;
+/-7.9228162514264337593543950335 with
28 places to the right of the decimal; smallest
non-zero number is
+/-0.0000000000000000000000000001
Date 8 bytes January 1, 100 to December 31, 9999
Object 4 bytes Any Object reference
String 10 bytes + string 0 to approximately 2 billion
(variable- length
length)
String Length of string 1 to approximately 65,400
(fixed-
length)
Variant 16 bytes Any numeric value up to the range of a
(with Double
numbers)
Variant 22 bytes + string Same range as for variable-length String
(with length
characters)
User-defined Number required The range of each element is the same as the
(using Type) by elements range of its data type.


En esta tabla, vemos que cada variable tiene diferentes rangos, algunos
más grandes que otros, y al mismo tiempo el tamaño de almacenamiento varía
también. La unidad más pequeña de memoria disponible se llama un byte, y
según esta tabla va del número 0 a 255.
Hagamos esto para empezar:
1. Active el botón de modo diseño, que está junto al botón Insertar en la pestaña
de desarrollador.
2. Haga doble clic en el botón ActiveX.
3. Ahora está listo para escribir el código del mismo.
Private Sub CommandButton1_Click()

End Sub
Eso es lo que deberías ver.
Ahora vamos a escribir algún código entre las líneas que vemos:
Private Sub CommandButton1_Click()
Dim X As Byte
Dim Y As Byte

X = 1
Y = Range("B1")
Do
Range("A" & X) = Y
X = X + 1
Y = Y + Range("B1")
Loop Until X = 101
End Sub

Este es el significado de este código. Dice:
Private Sub CommandButton1_Click()
Private significa que no encontrará el código en el botón Macros.
CommandButton1 es el nombre predeterminado dado al botón ActiveX y Click
significa que el código siguiente se aplicará sólo cuando hace clic en él.
Dim X As Byte
Dim declara variables, Por lo tanto, dice que X es una variable que se
utilizará con números de 0 a 255, porque "Byte" sólo acepta ese rango según la
tabla anterior.X = 1
He añadido el valor inicial de la variable, que será 1.
Y=Range(“B1”)
Significa que el valor de la variable Y es el mismo valor que la celda B1.
Do
Significa has esto.
Range(“A” & X) = Y
Ya hemos declarado X como una variable con un valor de 1. Por lo tanto, el
rango AX significa Rango ("A1") = Y, e Y es el Rango ("B1"). Si añado el
número 5 a B1, entonces Y = 5. Por lo tanto, finalmente es Range ("A1") =
5.X=X +1
Esto significa que X = 1 + 1 porque en ese momento X = 1, así finalmente
X = 2. La próxima vez que este proceso se repita, será X = X + 1 de nuevo, pero
esta vez sería X = 2, por lo que finalmente X = 3, porque X = 2 + 1 y así
sucesivamente.
Y = Y + Range("B1")
Esto seguirá el mismo proceso que el último paso, pero con el valor
agregado en Rango ("B1") que será el que hemos añadido. Si B1 tiene un 5,
entonces agregará otro 5, siguiendo una secuencia de acuerdo a lo que
escribimos en B1.
Loop Until X = 101
Significa que el mismo proceso entre Do y LOOP se repetirá hasta X =
101.
End Sub
Significa Fin del Procedimiento.

¡Vamos a Probarlo ahora!
Agregue el número 1 a la celda B1 y presione el botón. Verá que llena las celdas
de A1 a A100 una por una. Pruébelo con dos, y verá que agrega de A1: A100
dos por dos. Finalmente agregue el número 3 y presione el botón.
¡Felicitaciones! ¡Has encontrado tu primer error! Es un desbordamiento.

Los bugs son errores cuando se escribe un código incorrecto. En nuestro ejemplo
el código funciona bien con números de 0 a 255 solamente, y una vez que
pedimos al archivo que vaya 3 por 3 cien veces esperamos que pase de 3 a 300,
que es más de 255, por lo que causa un desbordamiento.
Para solucionarlo, tenemos dos opciones, aumentamos el valor de la variable o
dejamos que Excel lo agregue automáticamente.
Consideremos la posibilidad de aumentar la capacidad de la variable, podemos
cambiarla de byte (0 a 255) a integer (-32.768 a 32.767). Sería genial si
estábamos bastante seguros de que no trabajaremos con números más altos de
32.767, o incluso cambiarlo a "long", que va de -2.147.483.648 a 2.147.483.647.
Sería genial trabajar incluso con millones, pero imaginemos que alguien necesita
poner miles de millones en B1. En ese caso, incluso una variable long no sería
suficiente. Por lo tanto, la mejor manera de resolver esto es no declarar la
variable y dejar el código de la siguiente manera:
Private Sub CommandButton1_Click()
Dim X As Byte
X = 1
Y = Range("B1")
Do
Range("A" & X) = Y
X = X + 1
Y = Y + Range("B1")
Loop Until X = 101
End Sub

O declarar el valor como Variante, que permite cualquier número o letras.
Private Sub CommandButton1_Click()
Dim X As Byte
Dim Y As Variant
X = 1
Y = Range("B1")
Do
Range("A" & X) = Y
X = X + 1
Y = Y + Range("B1")
Loop Until X = 101

End Sub

¿Cúal es la ventaja de declarar variables como byte, integer o
cualquier otra?
Tal vez se esté preguntando ¿para qué declarar una variable como byte o
Integer, Si Excel puede agregar una automáticamente como en el ejemplo que
hemos visto?
La respuesta es simple e importante de saber. Recordemos que una
variable como byte almacena en memoria RAM sólo 1 byte, que es la menor
cantidad de memoria posible en Excel, pero una variante declarada como variant
almacena al menos 22 bytes. Si no declaramos un valor en el que estamos
seguros de que no agregará más de los valores necesarios, consumirá más RAM,
y hará que un programa funcione lento en tareas muy sencillas.
Por ejemplo, necesito declarar 1000 variables como byte. Consumiría
sólo 1 kilobyte de RAM.
Pero de forma predeterminada, si no proporciona un tipo de datos, la
variable se declara como tipo de datos Variant, que consume 22 bytes + string,
string es para letras.
Así, 1000 variables no declaradas serían automáticamente declaradas
como variants, y consumirían 22 kilobytes. Son 21 kilobytes vacíos, lo que
equivale al 95% del espacio no disponible y no se utilizan en absoluto en caso de
que los hubiéramos requerido como bytes en su lugar. Si va a programar en VBA
y desea que su programa funcione sin problemas, es mejor que aprenda qué tipo
de variable declarar. De lo contrario, probablemente tardará mucho en cargarse y
luego se ejecutará lentamente.

La importancia de Requerir Declaración de Variables
Probablemente, uno de los mayores problemas de no declarar una
Variable es crear bugs, porque simplemente escribimos algo mal.
Hagamos un ejemplo simple de ello.

1. Abra Visual Basic
2. Haga doble clic en ThisWorkbook
3. Agregue el código siguiente:

Public Sub Infinite()
myvariable = 200
myrange = 1
Do Until myvariabe = 300
Range("A" & myrange) = myvariable
myvariable = myvariable + 1
myrange = myrange + 1
Loop
End Sub

Como ves, es un código muy similar al que hicimos antes. Debe
detenerse una vez myvariable es igual a 300, pero continúa. ¿Puedes
ver el problema?

Si no, ejecute el código. Te darás cuenta de que va a ir más allá de 300,
y prácticamente no tendrá fin, o al menos hasta que no tiene más filas.
En Excel 365 el total de filas disponibles es 1048576, por lo que irá
hasta A1048576.
Si no desea esperar hasta eso, presione la tecla ESC que interrumpirá
la ejecución del código y luego presione el botón Finalizar.


Bueno, el problema es que nos falta sólo una letra de una
variable. Lo llamamos myvariable pero cuando escribíamos el código
perdimos la letra L: Do Until myvariabe. Excel identificó myvariable y
myvariabe como dos variables diferentes, y automáticamente las
asigna como tipo Variant.

¿Qué habría sucedido si tu código tiene mucho código? Para encontrar
el problema debe buscar en todo su código para encontrar la letra que
no escribió! ¡Como ves, sería un gran problema! Es por eso que
Microsoft Excel tiene una opción llamada Requerir Declaración de
Variables.
No le permitirá escribir nada que no sea código o una variable
declarada. Para activar esta función, haga lo siguiente:

1. Visual Basic
2. Ficha Herramientas
3. Opciones
4. Requerir Declaración de Variable
5. Aceptar.
Se agregará algo por encima del código, que dice Option Explicit. Sin embargo,
no verá ese cambio hasta que inicie un nuevo proyecto, inserte un módulo o lo
escriba usted mismo. Es por eso que es importante iniciar un nuevo proyecto
siempre con esta opción habilitada.
En este caso, agregue Option Explicit manualmente encima del código.
Option Explicit
Public Sub Infinite()
myvariable = 200
myrange = 1
Do Until myvariabe = 300
Range("A" & myrange) = myvariable
myvariable = myvariable + 1
myrange = myrange + 1
Loop
End Sub

Después de agregar este código ¡Ejecútalo!
Verá que muestra automáticamente un mensaje que dice Variable no
Definida e incluso resalta el problema. Por lo tanto, puede ver que evitará
problemas para las variables mal escritas.

Rendimiento de Aplicaciones
Ahora, imagine que realmente necesita rellenar una por una todas las
celdas de A1 a A1048576, y que es una de las funcionalidades que su aplicación
debe hacer. Casi siempre los desarrolladores están preocupados por la creación
de aplicaciones que se ejecuten rápidamente. En Excel no es una excepción.
Intente ejecutar el siguiente código y ver cuánto tarda en llenar toda la columna
A con números:
Public Sub FillColumnA()
Dim X As Long
X = 1
Do Until Range("A1048576") <> Empty
Range("A" & X) = X
X = X + 1
Loop
MsgBox "Finished"
End Sub
Cuando termine, mostrará un mensaje que dice "Terminado".
Probablemente tardará unos 5 minutos, tal vez menos o más dependiendo del
rendimiento de su computadora. Usted probablemente notará Excel diciendo que
no está respondiendo, pero en la mayoría de los casos sigue funcionando. ¡No
quiero esperar demasiado!
Una buena manera que los desarrolladores de VBA hacen que las
aplicaciones funcionen más rápido, es desactivando ScreenUpdating. Cada
cambio de Excel se supone que lo vemos en la pantalla. Pero, si no queremos
verlo, mejorará definitivamente su rendimiento.
Cambiemos el código a esto:
Public Sub FillColumnA()
Dim X As Long
On Error GoTo A
Application.ScreenUpdating = False
X = 1
Do Until Range("A1048576") <> Empty
Range("A" & X) = X
X = X + 1
Loop
A:
MsgBox "Finish"
End Sub

Ejecutelo y mida el tiempo que se tarda, a continuación, compare cuán
rápido es esta manera. No olvide borrar la columna A antes de empezar. Usted
debe notar una gran diferencia! Screenupdating es una gran herramienta cuando
se necesita aumentar el rendimiento de una aplicación. Sin embargo, ahora vaya
a la hoja de cálculo y trate de hacer algo. Debe notar que no es posible hacer
nada, o al menos no verá eso, porque screenudating = false desactivó los
cambios de visibilidad. Por lo tanto, cuando se utiliza
Application.screenupdating = false NUNCA se olvide de añadir
Application.ScreenUpdating = True en el final de su código, e incluso mejor
como una copia de seguridad en caso de error como el siguiente código:
Public Sub FillColumnA()
Dim X As Long
On Error GoTo A
Application.ScreenUpdating = False
X = 1
Do Until Range("A1048576") <> Empty
Range("A" & X) = X
X = X + 1
Loop
A:
Application.ScreenUpdating = True
MsgBox "Finished"
End Sub


MSGBOX
Como se vio en el código anterior, muestra un mensaje que dice
"Terminado". Podemos hacer mucho más que eso!
¡Uno de esos mensajes también puede ejecutar código! Observa la siguiente
tabla:

Constante Valor

vbOK 1

vbCancel 2

vbAbort 3

vbRetry 4

vbIgnore 5

vbYes 6

vbNo 7

Estos son el tipo de mensajes que puede mostrar, y una
vez que haga clic en él, se devolverá el valor de acuerdo a la tabla
anterior.
Ejecute el código siguiente:
Public Sub fff()
Dim X As Byte
X = MsgBox("This is the body",
vbYesNoCancel, "This is the title")
MsgBox X
End Sub
Se mostrará un msgbox con un botón Sí, No y Cancelar. Una vez que haga
clic en cualquier botón, X tomará ese valor y lo mostrará en el siguiente
MsgBox. Por lo tanto, si hace clic en Sí, verá un número 6, y si hace clic en No,
verá un número 7.
Esta es una gran ventaja, porque podemos preguntar si el usuario quiere
continuar o no, etc.
If y Select Case
Vemos que una vez que estamos agregando un msgbox, también podemos
crear un mensaje de advertencia, información, o crítico, etc Vamos a combinar
uno en el código de abajo, para que podamos averiguar cómo hacerlo:
Public Sub myMessageBox()
Dim X As Byte

X = MsgBox("I'll tell you the button you pressed on", vbYesNoCancel +
vbExclamation, "What Button would you press?")
If X = 2 Then
MsgBox "You Pressed Button Cancel"
ElseIf X = 6 Then
MsgBox "You pressed Button Yes"
Else
MsgBox "You pressed Button No"
End If

End Sub
Le indicará el botón que presionó. Esto significa que si usted puede saber
qué botón se presiona, entonces usted puede controlar una acción de acuerdo a
ella. Por ejemplo, ejecute una macro.

Si es el condicional. Como:
Public Sub Evaluation()
Dim X As Byte

X = Range("A1")
If X = 5 Then
MsgBox "There's a number " & X
ElseIf X = 6 Then
MsgBox "There's a number " & X
ElseIf X = 7 Then
MsgBox "There's a number " & X
ElseIf X = 8 Then
MsgBox "There's a number " & X
Else
MsgBox "There's another value"
End If
End Sub
Por lo que "If" hace un condicional, "elseif" se comprueba en caso de que la
primera condición no se cumpla, y se comprobarán tantas "elseif" como se
agreguen hasta que una condición se cumpla. "Else" se ejecutará en caso de que
no se cumpla cualquier condición. Por lo tanto, si no agregamos ningún número
de 5 a 8, veremos un mensaje diciendo "Hay otro valor", pero si ponemos un
número 8, veremos un mensaje diciendo que hay un número 8.
If, elseif y else son muy similares a otro tipo de código llamado Select Case,
Case y Case Else Sin embargo, este es más eficiente que IF en algunos casos.
Hagamos lo mismo que antes, pero usando el caso en su lugar:
Public Sub Cases()
Dim X As Byte
X = Range("A1")
Select Case Range("A1")
Case 5 To 8
MsgBox "There's a number " & X
Case Else
MsgBox "There's another value"
End Select
End Sub

Este último ocupa mucho menos código. Fue más fácil y mejor. Usted puede
hacer prácticamente lo mismo, pero depende del usted usted desee utilizar.


Cuestionario 3

¿Qué es una variable?
A) Es un valor que nunca cambia.
B) Es un valor que cambia.
C) Es un número especial.

¿Cúal es el tamaño de almacenamiento de una variable de tipo Byte y su
rango?
A) Almacena 2 bytes y pasa de -32567 a 32567.
B) Almacena 1 byte y va de -256 a -256.
C) Almacena 1 byte y va de 0 a 256.

¿Cúal es la ventaja de declarer variables?
A) Consume menos memoria RAM y hace que funcione sin problemas.
B) Consume más memoria RAM y la hace funcionar más lentamente.
C) No funcionaría si no se declararan variables.

¿Es obligatorio declarar variables?
A) Sólo si está activada la opción Requerir declaración de variable
B) Es obligatorio en todas las circunstancias
C) No lo es, Excel los declara automáticamente de acuerdo al valor agregado.

Msgbox regresa un valor dependiendo del botón presionado:
A) Asignamos el valor a cada botón
B) Devuelve un valor dependiendo del botón pulsado
C) Los valores no se devuelven




Capítulo 4
Proyecto: Crear una calculadora Simple
usando ActiveX

Vamos a crear una calculadora simple primero. Una vez completado este
proyecto, crearemos uno más sofisticado. Para hacer eso, requeriremos saber lo
siguiente:
¿Qué es un Modulo?
Cuando comencemos a escribir código VBA, por lo general empezaremos a
escribir en Sheet1. Pero, para entender Módulos, Procedimientos Privados y
Públicos, crearemos una calculadora visual. Primero, lo haremos en una hoja de
cálculo, y luego lo haremos como un programa real.


Un módulo, es algo así como un cuadro, en el que agregamos algún código para
ejecutar cuando lo "llamamos". Para entender cómo funciona, crearemos nuestra
calculadora usando algunos Módulos.

¿Cómo crear un modulo?
Primero, agregue los siguientes botones ActiveX en una hoja de cálculo de
la tabla tal como se muestra en la imagen. Para agregar el símbolo apropiado a
cada botón, no es como lo hicimos en los botones de formulario. En este caso,
debemos hacer clic en el botón de diseño, que está en la pestaña desarrollador, a
continuación, haga clic derecho en cada botón y verá algo como la imagen de
abajo, en la que vemos algo llamado "Nombre". La mayoría de la gente pensaría
que allí es donde podemos agregar el símbolo correcto para ver, pero eso está
mal. Excel identifica el botón con ese nombre. Imagine que tiene varios botones
con + como su nombre. ¿Cómo podría Excel o usted identificar cuál es el
correcto? Por lo tanto, cada botón tendrá un nombre diferente, vamos a añadir
uno bueno que nos deje saber lo que hace como En el ejemplo que escribí
cmdAddition. Me permite saber que se aplica al botón "+". Sin embargo, ¿cómo
puedo agregar el signo +?



En la imagen de arriba, verá que hay una propiedad llamada Caption. Ahí es
donde agregará el signo "+".
Incluso puede jugar un poco con las otras opciones, como el Backcolor, font,
height e incluso añadir una imagen. Yo dejé todas las opciones como estaban por
defecto.

Una vez que haya repetido el proceso para todos los botones, comencemos con
los siguientes pasos. Vamos a crear un módulo!
Sigue estos pasos:

1. Abra Visual Basic a través de la ficha de desarrollador. Por defecto, verás
algo como esto

2. Haga clic en la pestaña Ver y seleccione "Ventana de Propiedades".
Siempre usaremos esta ventana. Ahora deberías ver algo como lo que se
muestra dentro del cuadrado rojo:



3. Vamos a añadir nuestro primer modulo. Has clic en la pestaña Insertar,

luego en Modulo.
4. Verás un nuevo Folder llamado Modulos, con un archivo ahí llamado
Modulo 1.
5. Seleccionelo y en la ventana Propiedades Cambie su nombre por Addition,
luego repita el proceso hasta que haya creado un Módulo para Minus, Division y
Times.
6. Haga doble clic en el módulo "Addition" para abrirlo.
Verá que muestra una hoja en blanco completa. ¡Necesitamos agregar
un Procedimiento! Para ello, haga clic en pestaña Insertar, luego en
Procedimiento. Se mostrará una ventana como esta, añadir un nombre
y dejar las opciones predeterminadas:


5. Haga clic en Aceptar y verás algo como esto:


6. Entre esas líneas escribe el siguiente código:


Range ("A2") + Range("B2") = Range("C2")
7. Ahora ejecútelo haciendo clic en el triángulo verde arriba.
8. Está mostrando un error diciendo: Uso no válido o Propiedad. Tal vez es
porque no hemos añadido ningún número en las celdas A2 y B2. Añadelos y
ejecutalo de nuevo.

¡Sigue teniendo un problema! ¿Puedes ver lo que está mal?

Bienvenido a su segundo error! El problema aquí es muy habitual.
Pedimos a Excel que las células A2 + B2 sean iguales a C2 en lugar de
C2 iguales a A2 + B2. Este problema es sólo de orden. Es mejor no
olvidar esta regla !! Siempre agrega primero la celda que quieres
cambiar, luego añade los valores que necesitas. Como esto:
Range("C2") = Range("A2") + Range("B2")

Ejecútelo de nuevo con el mismo triángulo verde.
¡Fantástico! ¡Funciona!

Si ve una línea amarilla que no le permite ejecutarla, haga clic en
detener, corrija su código y vuelva a ejecutarlo.



Ahora verá que en la celda C2 encontramos el resultado de A2 + B2.

Vamos a completar los otros módulos para repetir el proceso anterior.
Agregue estos códigos para hacer eso:

Modulo Minus:

Public Sub Minus()
Range("C2") = Range("A2") - Range("B2")
End Sub

Modulo Division:

Public Sub Division()
Range("C2") = Range("A2") / Range("B2")
End Sub

Modulo Times:

Public Sub Times()
Range("C2") = Range("A2") * Range("B2")
End Sub

Se supone que debes ver un archivo como este:



Todos los módulos deben funcionar si los ejecuta.

Ahora, vamos a vincular los Módulos a su botón apropiado.

Para hacer esto solo haga lo siguiente:

1. Vaya a la hoja de cálculo
2. Haga clic en Modo Diseño
3. Haga doble clic en cada botón. Verá que cada vez que lo hace,
agrega algún código a Sheet1 (Sheet1). Finalmente, debería verse así:



Ahora, hagamos el proceso llamado "Call". Para ello escribiremos
cada Módulo entre sus líneas correspondientes:
Private Sub cmdAddition_Click()
Addition
End Sub

Private Sub CmdDivision_Click()
Division
End Sub

Private Sub CmdSubstraction_Click()
Minus
End Sub

Private Sub CmdTimes_Click()
Times
End Sub


Después de escribir el código anterior, intente pulsar un botón:


Bienvenido a su tercer error !!

¿Por qué está pasando esto? Leamos el mensaje.
Dice que no está esperando un Módulo, sino una Variable o Procedimiento.
El problema en este error es que los Módulos y Procedimientos en este ejemplo
se llaman iguales y eso es un gran error. ¡Nada debe tener el mismo nombre al
programar!


Vamos a arreglarlo rápido. Simplemente añada manualmente esta vez un número
1 después de cada procedimiento en cada módulo.
Public Sub Addition1()
Range("C2") = Range("A2") + Range("B2")
End Sub

También debe cambiar el código escrito en Sheet1. Basta con añadir la que
acabamos de añadir a cada subprocedimiento en los módulos:
Private Sub cmdAddition_Click()
Addition1
End Sub

Private Sub CmdDivision_Click()
Division1
End Sub

Private Sub CmdSubstraction_Click()
Minus1
End Sub

Private Sub CmdTimes_Click()
Times1
End Sub

Pruébelo ahora presionando cada botón y ver si funciona!
¡¡Estupendo!!
Se supone que tenemos una idea mucho mejor acerca de Módulos y
Procedimientos. Siempre los usaremos. Sin embargo, tal vez notó que
algunos de ellos se llaman Públicos y otros se llaman Privados.
Qué significa eso?

PUBLIC significa que ese procedimiento se puede llamar desde
cualquier lugar. Incluso te darás cuenta de que todos ellos están incluso
en la lista de macros, pero los que dicen PRIVATE no están.

Pruebe su significado cambiando solo uno o dos Módulos, cambie la
palabra Publico a Private y pruebe ejecutarlo.


Como era un privado, no podía encontrarlo. Cambiemos la palabra Private de
nuevo a Public, verás que funcionará.

Por lo tanto, los privados no pueden ser llamados, públicos pueden ser llamados,
incluso de la lista de macros. En otras palabras, Privates no pueden ser
enlazados, pero Publics pueden.
Hemos visto las funciones más básicas de VBA. Usted debe tener una gran idea
sobre VBA ahora. Sin embargo, hagamos algo mucho más profesional: una
calculadora real.

¿Sumar letras?
Antes de comenzar la otra calculadora, haga este experimento que será
interesante conocer, y al mismo tiempo, muy útil. En la última calculadora
hemos intentado agregar dos letras en lugar de números y sumarlas.
¡Te darás cuenta de que puedes sumar letras !! A + A = AA !! ?? No debería
funcionar si realizas una sustracción, división o multiplicación.
Esto ocurre porque usar "+" en VBA no es lo mismo que la fórmula = SUM ().
Recordemos esto por ahora, porque será muy útil para el próximo proyecto.



Cuestionario 4

¿Qué es un procedimiento Privado?
A) Significa que nadie puede ver el Código porque está oculto.
B) Significa que no se puede copiar y pegar
C) No se puede llamar desde otra parte del código

¿Qué es un procedimiento Público?
A) Significa que puede ser llamado y ejecutado desde cualquier parte del libro
B) Se puede ver en línea
C) Significa que no puede protegerlo con contraseñas.




Capítulo 5
Proyecto: Calculadora usando un Formulario


Repaso
Esta vez usaremos mucho más funcionalidades de Visual Basic para
Aplicaciones. Ahora vamos a entender por qué se llama Visual Basic.

Primero que nada vamos a revisar algunas cosas importantes a considerar:
1. Elija las Variables correctas para evitar errores y hacer que el programa
funcione sin problemas.
2. Escriba el código en el orden correcto, de lo contrario producirá un error.
3. Nunca repita nombres en un programa. Todo debe identificarse con un nombre
único.
4. Espero que hayas notado letras azules. Son códigos incorporados usados por
Excel VBA. No los borre ni los cambie sin conocimiento, o producirá errores.
5. SUGERENCIA: Siempre agrega nombres usando al menos un Mayúscula, y
cuando los llames, escribe sus nombres usando minúsculas. Notará que al usar
esta forma evitará escribir errores, porque si lo escribió correctamente agregará
mayúsculas automáticamente, de lo contrario permanecerá igual.
6. Ejecute constantemente el nuevo código que ha escrito, ll cual le asegurará
que está funcionando bien.
7. Agregue suficientes comentarios para que sepa lo que hace su código en caso
de que necesite revisar algo en el futuro. Aprenderemos cómo hacerlo.

FORMAS
Visual Basic para Aplicaciones en Excel tiene una característica muy atractiva
llamada Forms en la que podemos crear una aplicación visual como la que vimos
al principio de este libro. Así crearemos la calculadora.
Sigue estos pasos:

1. Abra un Nuevo documento en blanco.
2. Abra Visual Basic.
3. Haga clic en la pestaña Insertar.
4. Userform.

Debería ver algo como esto:


Eso es un formulario de usuario. Se utilizará esta vez para crear una
calculadora. Primero, ves una caja llamada "Controles" con varias opciones
dentro. Lo usaremos casi todo el tiempo, así que no lo cierres. En caso de que lo
hagas, puedes abrirlo de nuevo haciendo clic en la pestaña Ver, luego en caja de
herramientas.
No cierre las propiedades del formulario tampoco. Estas serán las
principales herramientas que usaremos para este proyecto, y en este caso, ni
siquiera tocaremos una hoja de cálculo de Excel.
En la ventana de propiedades cambie estos valores:
Name: CalculatorProject
Caption: Calculator

Height: 260
Width: 200

Recuerde que caption es el título mostrado.
En la caja de herramientas seleccione label, es un A junto a la flecha.


Una vez seleccionada, haga clic en la parte superior del formulario,
mantenga presionada y arrastre para hacer un rectángulo que será nuestra
pantalla para la calculadora.

Ahora, seleccione la etiqueta y cambie su nombre en las propiedades.
Nombrelo Display. A continuación, borre el valor de Caption.
En el ToolBox, seleccione CommandButton, a continuación, agregue una
serie como la siguiente:

Cada vez que agregue un nuevo botón, asegúrese de agregarlo con el


tamaño siguiente:
Height: 30
Width: 36
TIP: Haga sólo uno, luego copie y pegue todos los botones que necesita.
Colóquelos en el orden correcto, luego asegúrese de agregar cada botón con la
siguiente información:

Name Caption

CmdDel Del
CmdCE CE
CmdPercent %
CmdTimes *
CmdDivision /
CmdAdd +
CmdMinus -
CmdEquals =
Cmd1 1
Cmd2 2
Cmd3 3
Cmd4 4
Cmd5 5
Cmd6 6
Cmd7 7
Cmd8 8
Cmd9 9
CmdDot .
Cmd0 0
Cmd00 00


Genial!

Código de Commmand Buttons
Una vez que tenemos el diseño de la calculadora y sus nombres
correctamente, podemos ejecutarlo y hacer clic en cada botón. Notará
que no hace nada, porque no le hemos dicho a Excel qué hacer con él.
Excel no sabe si quiero ese formulario para una broma o cualquier otra
cosa. Por lo tanto, vamos a agregar código a cada botón.
1. Haga doble clic en el botón con el número 1.
2. Agregó automáticamente este código:
Private Sub cmd1_Click ()
End Sub
3. Agregue este código entre las líneas anteriores:
Display.Caption = cmd1.Caption
4. Ejecute el formulario.
5. ¡Usted debe ver un número uno escrito en la pantalla!! ¡Pero,
no agrega más que apenas un número 1 !! ¡Si va a ser una calculadora,
necesitamos agregar varios si es necesario! ¿Qué pasa?
El problema aquí es que el código dice que el Caption de Display (que
dejamos vacío), es igual a Caption de cmd1, que es un número 1 y es
exactamente lo que está haciendo.
Por lo tanto, para resolver este problema debemos decirle que agregue un
número 1 después de un número 1, y así sucesivamente.
Display.Caption = Display.Caption + cmd1.Caption
Tal vez lo tienes ahora. Es exactamente lo que hicimos casi al principio de este
libro. ¿Te acuerdas cuando hacemos que las celdas aumenten su valor según el
número escrito en la celda B1?
Si desea comprobarlo para revisar, vaya a Variables, Do y Loop. En la página
11.
Esto significa que X = X + 1 o, en otras palabras, significa que Display.caption
agregará su propio valor más el caption de cmd1. Por lo tanto, puede ser 1 = 1 +
1 = 11 No tiene ningún sentido en matemáticas, sin embargo, ¿te acuerdas
cuando sumamos letras a nuestro último proyecto de calculadora? De acuerdo
con esa calculadora A + A = AA, así que aquí 1 + 1 = 11. Para intentar hacerlo
más claro, si pulsas el botón uno sería 1 = 1 = 1 entonces supongamos que
escribe el número dos. Sería 1 = 1 +2 = 12, ahora escribe el número 7: 12 = 12 +
7 = 127 y finalmente escribe el número 9: 127 = 127 +9 = 1279 y así
sucesivamente.
Ejecútelo con el nuevo código. ¡Estupendo! Debe estar funcionando ahora!
Debería tener todo este código:
Private Sub cmd1_Click()
Display.Caption = Display.Caption + cmd1.Caption
End Sub

Vamos a repetir el proceso a todos los números y símbolos, haciendo
doble clic en cada botón y una vez que agrega algún código automáticamente,
escribe la línea de código correcta entre ellos, mira el siguiente código para que
puedas tener una idea mejor:
Private Sub Cmd0_Click()
Display.Caption = Display.Caption + Cmd0.Caption
End Sub

Private Sub Cmd00_Click()
Display.Caption = Display.Caption + Cmd00.Caption
End Sub

Private Sub cmd1_Click()
Display.Caption = Display.Caption + cmd1.Caption
End Sub

Private Sub Cmd2_Click()
Display.Caption = Display.Caption + Cmd2.Caption
End Sub

Private Sub Cmd3_Click()
Display.Caption = Display.Caption + Cmd3.Caption
End Sub

Private Sub Cmd4_Click()
Display.Caption = Display.Caption + Cmd4.Caption
End Sub

Private Sub Cmd5_Click()
Display.Caption = Display.Caption + Cmd5.Caption
End Sub

Private Sub Cmd6_Click()
Display.Caption = Display.Caption + Cmd6.Caption
End Sub

Private Sub Cmd7_Click()
Display.Caption = Display.Caption + Cmd7.Caption
End Sub

Private Sub Cmd8_Click()
Display.Caption = Display.Caption + Cmd8.Caption
End Sub

Private Sub Cmd9_Click()
Display.Caption = Display.Caption + Cmd9.Caption
End Sub

Private Sub CmdAdd_Click()
Display.Caption = Display.Caption + CmdAdd.Caption
End Sub

Private Sub CmdDivision_Click()
Display.Caption = Display.Caption + CmdDivision.Caption
End Sub

Private Sub CmdDot_Click()
Display.Caption = Display.Caption + CmdDot.Caption
End Sub

Private Sub CmdMinus_Click()
Display.Caption = Display.Caption + CmdMinus.Caption
End Sub

Private Sub CmdPercent_Click()
Display.Caption = Display.Caption + CmdPercent.Caption
End Sub

Private Sub CmdTimes_Click()
Display.Caption = Display.Caption + CmdTimes.Caption
End Sub
Todo este código debería permitirnos ver cada número y símbolo en la
pantalla. El botón Igual, Del y CE son aquellos que no vemos escritos en nuestra
pantalla, y les daremos un tratamiento diferente.
:
Primer Botón CE:
Debe limpiar o borrar toda la pantalla. Este es muy fácil, este es el
código:
Private, Sub CmdCE_Click()
Display.Caption = Empty
End Sub
Significa exactamente lo que se describe en el mismo código. La pantalla
quedará vacía.
Segundo, Botón Del:
Debe borrar uno por uno, a partir del último número que
hemos añadido. ¿Cómo lo haría usted? Tal vez, si está aprendiendo
VBA ya debe conocer las fórmulas de Excel. Por lo tanto, trate de
averiguar cómo hacerlo.
En caso de que te sea difícil te daré un atajo:


Valor (Celdas Formula aplicada Resultado
A1 Debajo)

12345678 =left(A1,len(A1)) 12345678

12345678 =left(A1,len(A1)-1) 1234567

12345678 =left(A1,len(A1)-2) 123456

=left() Muestra desde la izquierda el valor, según el número de letras que le
pedimos.
=len() Cuenta el número de letras contenidas en una celda.
-1 Se restará uno del total de letras o números de len().
El resultado se muestra arriba. Está claro, ¿qué sucede si repetimos el proceso
varias veces aplicado a la misma celda?

Repeticiones Valor Formula
(Celdas Aplicada
A1
Debajo)

1 12345678 =left(A1,len(A1))

2 1234567 =left(A1,len(A1))

3 123456 =left(A1,len(A1))

Por lo tanto, hace lo que un botón DEL debe hacer. Necesitamos que cada vez
que pulsemos ese botón borre sólo la última letra o número agregado, como lo
hace esta fórmula. Entonces, necesitamos que el botón aplique esta fórmula.
¿Cómo hacer eso en VBA?
Primero, haga doble clic en el botón y agregue el código siguiente:
X = Len(Display.Caption) - 1
Y = Display.Caption
Display.Caption = Left(Y, X)

¡¡Eso es!! ¡Acabamos de añadir dos variables y las utilizamos en una
secuencia muy simple! Pruébelo. Añada algunos números y luego presione este
botón. Debería de funcionar. Sin embargo, ¿qué sucede si no hay más números y
presiona el botón?


Es obvio que produciría un error. ¿Cómo resolver esto?
Eso es fácil, agregue un código incluyendo IF:
Private Sub CmdDel_Click()
If Display.Caption <> Empty Then
X = Len(Display.Caption) - 1
Y = Display.Caption
Display.Caption = Left(Y, X)
End If
End Sub

Hemos añadido estas dos líneas de código, lo que significa que si
display.caption no" está vacía entonces aplique el código. Por lo tanto, si está
vacío no haría nada.

Formulas de Excel en VBA
En tercer lugar, vamos a trabajar ahora con el botón de igual:
Lo necesitamos para hacer toda la operación que hemos agregado en
display.caption. ¿Cómo lo harías tú?
Esta es la parte más difícil de esta calculadora, y el botón más importante porque
dará el resultado de todo lo que hemos hecho. Hay varias maneras de hacer esto,
pero esta vez vamos a usar: Application.WorksheetFunction. Una vez que
escriba el punto, debería ver una larga lista. Todas esas son la lista completa de
fórmulas que usamos normalmente en Excel. Vamos a agregar el siguiente
código y ver qué sucede esta vez:
Private Sub CmdEquals_Click()
Dim X As Variant
X = Application.WorksheetFunction.Sum(Display.Caption)
Display.Caption = Empty
Display.Caption = X
End Sub

Debería funcionar, no crees? Pero no lo hace.


La primer linea declara X como variant lo cual significa que puede
guardar cualquier valor.
X es igual a SUM(display.caption)
Lo cual debería ser como X = sum(2+2*4/7)

Combinar VBA con una Hoja de Calculo
Si lo intenta en una celda de una hoja de cálculo, funcionará. Pero no está
funcionando usando una variable debido a varias razones, la principal es porque
uno realmente no puede agregar un número 12 más un signo de adición, etc.
Necesitaríamos hacer una conversión y algunos procedimientos más, pero en
este caso Podríamos empezar a usar la hoja de cálculo.

Utilizaremos una celda de la hoja de cálculo para familiarizarnos con
VBA y las hojas de cálculo de Excel.
Mandaremos a Excel para que convierta Display.Caption en una Fórmula
en la celda A1.
Si graba una Macro y agrega una Fórmula, probablemente el código
será: Activecell.FormulaR1C1 = "=" ... Pero no necesitamos el R1C1 para
nuestro código aquí, por eso lo borramos.
Private Sub CmdEquals_Click()
Range("A1").Formula = "=" & Display.Caption
Display.Caption = Range("A1").Value
End Sub

¡Ejecuta el programa y inténtalo ahora! ¡¡Funciona!! Ahora, escriba un
código incorrecto, algo como:
5*
And press =.

¡Otro error!
Es por eso que los programadores prueban sus aplicaciones con
frecuencia. Tienes que hacer lo mismo siempre. Como ves, hemos arreglado
varios bugs sólo trabajando en una Calculadora, pero una vez que te acostumbras
al código los identificarás e incluso los evitarás más fácilmente. Yo sé eso.
Para corregir este error, aplicaremos nuestros primeros controles de
errores. Por lo tanto, cada vez que algo va mal se aplicará en su lugar este tipo de
ventanas.
Agregue el siguiente código:
Private Sub CmdEquals_Click()
On Error GoTo A
Range("A1").Formula = "=" & Display.Caption
Display.Caption = Range("A1").Value
Exit Sub
A:
Range("A1").Clear
Display.Caption = "Error"
End Sub

Puede ser fácil de entender. OnError Goto A, y vemos una A en el medio.
Por lo tanto, si algo va mal, el código se aplicará desde A hasta el final, que es
End Sub.
Dice Borra la celda A1 y en Display.Caption muestra el mensaje Error en
su lugar.
También vemos arriba de A: algo que dice Exit Sub. Significa que el
código será leído hasta que lea Exit Sub, si no la calculadora leería todo el
tiempo lo que está escrito para los errores también. No queremos eso.
Pruébelo de nuevo, escriba algo incorrecto como 5+ solamente.
¿Lo ve? ¡¡Funcionó!!
Nuestra Calculadora se ve mejor en cada momento.

Empezando con Declaraciones:
Ahora, creo que no es agradable ver el mensaje de error incluso después
de que pulsé otro botón:


Sería útil si la borra automáticamente una vez que tecleo
cualquier otro botón. Para hacer eso solo agregaremos otra línea
de código al botón de igual. Esta vez no se aplicará cuando
hacemos clic en él, sino cuando salimos del botón o dejamos de
seleccionarlo. Lo cual que sucederá una vez que seleccionemos
otro botón. Para hacer esto solo haga lo siguiente:

1. Doble clic en el botón igual.
2. Clic para ver todas las opciones como en la imagen y selecciona Exit.

¡Estupendo! ¡Ahora has interactuado con los diferentes


atributos que tiene cada botón! Como se ve el código podría aplicarse
si hace clic en el botón, una vez que lo mantenga presionado, cuano
sales e incluso si coloca el cursor sobre el botón! Es increíble, ¿no te
parece?
Una vez que haya elegido Exit, verá un nuevo código allí.
Agregue lo siguiente:
Private Sub CmdEquals_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
Display.Caption = Empty
End Sub
¡Bien! Está funcionando como queríamos ahora. Creo que usted ha visto que
escribir código es sólo lógica, después de aprender algunos comandos más
podrás hacer cosas increíbles.

Por cierto, aprendiste a relacionar un poco una hoja de cálculo y VBA, porque
estamos utilizando el rango A1. ¿Qué tal si ni siquiera queremos utilizar
cualquier celda de una hoja de cálculo?
Como vimos, no podemos usar variables. ¿Cierto? Obviamente, ¡Podemos! Sólo
necesitamos saber la manera.
Ahora, puede borrar todo desde el botón de igual, cambie el código de:
On Error GoTo A
Range("A1").Formula = "=" & Display.Caption
Display.Caption = Range("A1").Value
Exit Sub
A:
Range("A1").Clear
Display.Caption = "Error"
End Sub

A esto:
Private Sub CmdEquals_Click()
On Error GoTo A
Display.Caption = Application.Evaluate(Display.Caption)
Exit Sub
A:
Display.Caption = "Error"
End Sub

No fuimos directamente a esta solución porque al cometer errores recibimos
una valiosa experiencia. Tal vez, un día no sabrás qué función utilizar, y saber
cómo vincular VBA con una hoja de cálculo será muy útil para resolver sus
problemas.
El código anterior tiene este significado:
Application significa Excel.
Evaluate es un método de la aplicación o Excel. Convierte un nombre de
Microsoft Excel en un objeto o un valor. En otras palabras, en valores operables
que pueden ser sumas, divididas, multiplicadas, etc.
Ahora, no estamos utilizando ninguna hoja de cálculo en absoluto. Entonces,
¿por qué debemos dejarlo abierto? Solo estamos interesados en ver la aplicación
que hemos creado. ¿Qué podemos hacer?

Declaraciones Open y Close: Mostrar un formulario sin mirar
ninguna hoja de cálculo.
Esta calculadora está funcionando bien. Pero no nos gusta ver toda la
hoja de cálculo detrás. Ni siquiera queremos ver Excel abierto en absoluto,
porque no es una cosa común de ver cuando usamos una aplicación, así que
vamos a sacar la hoja de cálculo!
Debe tener un aspecto como este:

Sólo vemos el escritorio detrás, y ninguna hoja de cálculo.


Vamos a hacerlo paso a paso. Aprenderemos más sobre las
funcionalidades de VBA, e incluso algunos valores de seguridad de
Macros.
Sigue estos pasos:
Primero que nada, queremos que nuestra calculadora se abra
automáticamente una vez que el archivo esté abierto. Por lo tanto,
en el Folder del proyect VBA (Calculadora), seleccione
ThisWorkbook. Debería ver dos opciones, una dice General y la
otra dice Declaraciones..

1. Abre la general y selecciona Workbook.


2. Ahora, las declaraciones deben ser cambiadas a Open. De lo contrario,
selecciónelo.


Esto significa que cada vez que se abra este libro, ejecute el
código entre:
Private Sub Workbook_Open()

End Sub


3. Ahora, entre esas linas de código, inserta lo siguiente:

Private Sub Workbook_Open()


CalculatorProject.Show
End Sub



4. Guarda tu archivo.
5. Cierralo y abrelo para hacer un intento! Debería abrir el proyecto de la
Calculadora automaticamente. Ese es el evento Open y es muy útil desde
proyectos pequeños a grandes.

Todavía no vemos la aplicación solamente, sino que Excel


sigue apareciendo. Por lo tanto, ¿recuerdas que en algún código
anterior "Application" significa Excel? Significa que debemos escribir
algún código diciendo que la Application debe ser invisible.
Agregue lo siguiente al código que agregó recientemente:
Application.Visible = False
Debe tener un aspecto como este:
Private Sub Workbook_Open()
Application.Visible = False
CalculatorProject.Show
End Sub

¡Guarde el archivo, cierrelo y abralo para intentarlo!
¡¡Estupendo!! Ahora sólo ve la aplicación! Una vez que cierre
su calculadora todo parece estar funcionando bien. Sin embargo,
todavía hay algo que está mal.
Una vez que cierre la calculadora, Excel parece cerrar también,
sin embargo, permanece abierto pero no visible. ¡Cerramos solamente
la aplicación !! Intente abrir el mismo archivo en el que tiene su
calculadora. Usted notará que se abre sin cargar nada y no muestra la
calculadora, la razón es que estaba abierto!
Queremos que una vez que cierre la calculadora, también se
cierre Excel. Para hacer esto, siga estos pasos:
1. Abra VBA.
2. CalculatorProject
3. Haga doble clic en cualquier parte de su formulario para ver el código. No el
Caption ni los botones, sino cualquier otra parte de él.
4. Se abrirá algo como esto:
Private Sub UserForm_Initialize()

End Sub

1. Es muy similar a la Declaración Open que
aprendimos, pero sólo funciona con el proyecto. Sin
embargo, no necesitamos esto ahora. Necesitamos el
código de cierre de nuestro formulario. La forma de
seleccionarlo es como hicimos con ThisWorkbook.
Vaya a donde dice Initialize, luego seleccione el más
lógico, que sería Terminate.
2. Una vez que lo haya seleccionado, verá un
código como este:

Private Sub UserForm_Terminate ()

End Sub

3. ¿Recuerde de nuevo que Application significa
Excel? Se dará cuenta una vez que escriba Application.
(Seguido por un punto) muestra una lista grande.
Puedes echar un vistazo, pero ten cuidado con la
experimentación. A veces, puedes cometer grandes
errores jugando con código. ¡Incluso fuera de Excel !!
Elija Application.Quit
Su código debería tener este aspecto:
Private Sub UserForm_Terminate()
Application.Quit
End Sub
Guarda tu archivo y pruebalo! Debe funcionar ahora!
Rápido y fácil!


Seguridad de Macros
Nuestra Calculadora parece funcionar muy bien ahora. Sin embargo,
intente hacer lo siguiente:

1 7*7
2. Pulse el botón Igua
3. Usted ve 49
4. Ahora, quiero 49 + 1. Por lo tanto, escriba (+) ...
5. Notará que el 49 se borra automáticamente. No es normal en una calculadora.
Debería dejarme añadir algún código después de que mostrara un resultado.
Vamos a agregar el código.

Tal vez, estamos en un apuro. ¿Cómo vamos a editar el código VBA si se abre y
cierra Excel automáticamente? ¿Cómo vas a tener acceso a eso?
Esta es una gran oportunidad para entender la seguridad de Macros.
Deberías haber hecho clic en el botón Habilitar Macros para trabajar
con VBA, tal como aprendimos en el Capítulo 2. Una vez que hagas
clic en él, Excel guarda una ruta en la que ese archivo específico puede
trabajar con Macros. Por lo tanto, para deshabilitar las macros
permitidas todo lo que tienes que hacer es mover el archivo a otra
ubicación. Intenta hacerlo y luego vuelve a abrirlo. Notará un mensaje
diciendo que las macros han sido deshabilitadas.


Otra forma de hacerlo sin cambiar la ubicación es cambiar el nombre
del archivo. Pruébalo y verás que recibes el mismo mensaje sobre
Macros.
Si no lo haces clic en Habilitar contenido, o simplemente deseas
cambiar las opciones de seguridad de macros, vaya a la pestaña de
desarrollador y haga clic en Seguridad de macros. Verá todas las
opciones disponibles para Macros en todos los libros y para ese
archivo específico.
Ahora puedes ir a VBA y cambiar el Código que necesitamos.

Comentarios
Ahora, no queremos que nuestra calculadora borre lo que está escrito en
nuestra pantalla, a menos que sea un mensaje de error. Nos permitirá trabajar
más eficientemente, por lo que tenemos que ir de nuevo al código que borra eso.
¿Recuerdas cuál hace eso? Probablemente lo hagas porque son sólo unos pocos
botones. Sin embargo, ¿qué habría sucedido si fueran cientos y cientos de
comandos?
Siempre es conveniente escribir algunos comentarios que nos permitan
identificar fácilmente qué cosas hace algún código. Es muy común arreglar
algunos errores, añadir, eliminar o mejorar algunas funcionalidades durante la
programación. Por lo tanto, no se olvide de agregar comentarios para que pueda
ir más rápido al código que necesita cambiar.
En este caso, necesitamos cambiar el Botón Igual. Sin embargo, este tiene
dos códigos agregados. Se ejecuta cuando hacemos clic en el botón y el otro
cuando dejamos de seleccionarlo.

Private Sub CmdEquals_Click()
On Error GoTo A
Display.Caption = Application.Evaluate(Display.Caption)
Exit Sub
A:
Display.Caption = "Error"
End Sub
Private Sub CmdEquals_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Display.Caption = Empty
End Sub

El código que necesitamos cambiar es el segundo de los anteriores. Pero
primero, vamos a agregar algunos comentarios para recordar lo que hacen para
referencia futura. Para agregar comentarios, todo lo que necesitas hacer es
escribir lo que quieras agregando un ' al principio de cada oración. En el ejemplo
siguiente he añadido dos oraciones, por lo que necesitaba poner un ' al principio
de cada oración.

Private Sub CmdEquals_Click()
‘This Macro displays an error message in case we type wrong imposible
mathematics and click equals
‘otherwise it would run a bug and the program would stop working.
On Error GoTo A
Display.Caption = Application.Evaluate(Display.Caption)
Exit Sub
A:
Display.Caption = "Error"
End Sub
Private Sub CmdEquals_Exit(ByVal Cancel As MSForms.ReturnBoolean)
‘It erases the display once we select stop selecting the equals button.
Display.Caption = Empty
End Sub

De acuerdo. Vamos a arreglar el código ahora.
Queremos decirle a Excel: Si la pantalla muestra el mensaje de error, borralo, de
lo contrario, mantén lo que aparece en pantalla. Ahora, vamos a traducir el
mensaje a algún código, el cual Excel pueda entender.
Private Sub CmdEquals_Exit(ByVal Cancel As MSForms.ReturnBoolean)
‘It erases the display once we select stop selecting the equals
button.
If Display.Caption = "Error" Then
Display.Caption = Empty
Else
Display.Caption = Display.Caption
End If
End Sub

Es exactamente lo que queremos. ¡Intentalo! Escriba algo como 3 * y
luego igual. Muestra el mensaje de error y lo borra una vez que escribe algo más.
Ahora, escriba de nuevo 7 * 7 entonces igual. Usted debe ver 49, ahora el escribe
+1 Funciona!
Sólo borra el mensaje de error pero mantiene los números. Ahora,
aunque funciona bien, hemos añadido un código innecesario: Display.Caption =
Display.Caption
Vamos a borrarlo, incluyendo "else" que significa "de lo contrario". Tal
vez no lo notaríamos, pero no es profesional y en un grado muy pequeño
consume recursos. Nunca agregue código innecesario a ningún programa que
realice. Será ideal para usted y para aquellos que usan su programa. Si usted
hace malos hábitos de programación, probablemente tendrá algunos problemas
futuros cuando necesite agregar páginas y páginas de código.
Una vez que elimine el código innecesario debería verse así:

Private Sub CmdEquals_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
If Display.Caption = "Error" Then
Display.Caption = Empty
End If
End Sub
¡Funciona también! ¿Lo ves? ¡El código que borramos era innecesario!

Para trabajar siempre como Pro, nunca olvide estos consejos:
Siempre agregue comentarios.
Nunca agregue código innecesario.
Elija siempre las variables correctas
Tal vez se esté preguntando por qué no elegimos ninguna variable para el
Proyecto de Calculadora. De hecho, lo hicimos aunque no las declaramos. Todas
nuestras variables se declaran automáticamente como Variant. Necesitábamos
ésas porque esta calculadora puede trabajar con billones y billones de números.
Un byte, integer, long, etc no habría funcionado en caso de que el usuario
necesite agregar un número más grande que el permitido por ellos.
Recuerde, si no se declaran variables éstas se agregan automáticamente
como variants que permiten cualquier valor, no importa cuán grande o pequeño
es.

El Código Completo del Proyecto Calculadora
Para este proyecto, el código completo en el CalculatorProject debería
tener este aspecto:
Private Sub Cmd0_Click()
Display.Caption = Display.Caption + Cmd0.Caption
End Sub

Private Sub Cmd00_Click()
Display.Caption = Display.Caption + Cmd00.Caption
End Sub

Private Sub cmd1_Click()
Display.Caption = Display.Caption + cmd1.Caption
End Sub

Private Sub Cmd2_Click()
Display.Caption = Display.Caption + Cmd2.Caption
End Sub

Private Sub Cmd3_Click()
Display.Caption = Display.Caption + Cmd3.Caption
End Sub

Private Sub Cmd4_Click()
Display.Caption = Display.Caption + Cmd4.Caption
End Sub

Private Sub Cmd5_Click()
Display.Caption = Display.Caption + Cmd5.Caption
End Sub

Private Sub Cmd6_Click()
Display.Caption = Display.Caption + Cmd6.Caption
End Sub

Private Sub Cmd7_Click()
Display.Caption = Display.Caption + Cmd7.Caption
End Sub

Private Sub Cmd8_Click()
Display.Caption = Display.Caption + Cmd8.Caption
End Sub

Private Sub Cmd9_Click()
Display.Caption = Display.Caption + Cmd9.Caption
End Sub

Private Sub CmdAdd_Click()
Display.Caption = Display.Caption + CmdAdd.Caption
End Sub

Private Sub CmdCE_Click()
Display.Caption = Empty
End Sub

Private Sub CmdDel_Click()
If Display.Caption <> Empty Then
X = Len(Display.Caption) - 1
Y = Display.Caption
Display.Caption = Left(Y, X)
End If
End Sub

Private Sub CmdDivision_Click()
Display.Caption = Display.Caption + CmdDivision.Caption
End Sub

Private Sub CmdDot_Click()
Display.Caption = Display.Caption + CmdDot.Caption
End Sub

Private Sub CmdEquals_Click()
On Error GoTo A
Display.Caption = Application.Evaluate(Display.Caption)
Exit Sub
A:
Display.Caption = "Error"
End Sub
Private Sub CmdEquals_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
If Display.Caption = "Error" Then
Display.Caption = Empty
End If
End Sub

Private Sub CmdMinus_Click()
Display.Caption = Display.Caption + CmdMinus.Caption
End Sub

Private Sub CmdPercent_Click()
Display.Caption = Display.Caption + CmdPercent.Caption
End Sub

Private Sub CmdTimes_Click()
Display.Caption = Display.Caption + CmdTimes.Caption
End Sub

Private Sub UserForm_Terminate()
Application.Quit
End Sub

En ThisWorkbook el Código debería mirarse así:

Private Sub Workbook_Open()
Application.Visible = False
CalculatorProject.Show
End Sub

Try it! It is working great!



Añadir combinaciones del teclado a un botón de comando.
Hay otra cosa que sería genial añadir. ¿Ha notado que sólo funciona
haciendo clic en los botones?
Creo que sería aún mejor si pudiéramos usar el teclado en lugar de usar
clics solamente.
Vamos a ver cómo hacerlo:

1. Abra su formulario de proyecto VBA.



2. Ahora, supongamos que queremos agregar alguna combinación de teclas de
acceso rápido a Cmd1, que es el botón con el número uno. Es muy simple.
Haz clic en eso.
3. Ve a sus propiedades.
4. En el Accelerator escriba cualquier botón. En este caso, el más apropiado
sería el número 1, como en el siguiente ejemplo:


5. Después de hacer eso, debería ver el número uno subrayado


6. Cuándo usted ve algo subrayado como eso, no sólo en Excel sino en todos
los sistemas operativos de Microsoft, significa que si usted sostiene Alt +
"la letra o el número subrayado" lo ejecutará.
7. Intente ejecutar la Calculadora y presione Alt + 1 para ver qué hace. Debe
escribir el número uno.
8. Haz lo mismo para todos los demás números y símbolos, excepto DEL, CE,
00 y =.


Si ha intentado agregar la tecla de acceso rápido Backspace a
DEL o Supr a CE, notará que no es posible. Por lo menos, no de
esta manera.

Orden de los comandos
Cuando abra la Calculadora, verá que si pulsas TAB seleccionará los
botones, pero probablemente de forma no ordenada. Queremos darles una orden.
Realice lo siguiente para solucionarlo:
1. Abra VBA y abra su CalculatorProject.
2. Haga clic en la pestaña Ver.
3. Haga clic en Orden TAB.
4. Reorganice la lista según el orden que prefiera mediante los botones Subir y
Bajar.
5. Haga clic en Aceptar cuando haya terminado.

Añadir una contraseña a tu Código VBA.
Probablemente usted sabe que puede agregar una contraseña a cualquier
archivo de Excel siguiendo este procedimiento:


1. Pestaña Archivo
2. Información
3. Proteger libro
4. Cifrar con la contraseña
Es una buena opción, sin embargo, no es una contraseña de VBA. No
queremos introducir una contraseña cada vez que abramos la calculadora.
Lo único que queremos es proteger nuestro código de cualquier persona no
autorizada que quiera cambiarlo. Para hacer eso sólo haga lo siguiente:

1. Abrir VBA
2. Haga clic en Herramientas
3. Haga clic en VBAProject Properties
4. Pestaña Protección
5. Agregue un bloqueo de contraseña para ver si desea
6. Haga clic en Aceptar
¡De esta manera, usted protege su código de la calculadora !!




Cuestionario 5

¿Qué es un formulario de usuario?
A) Es una interfaz visual de una aplicación.
B) Son botones de comando, etiquetas y casillas de verificación.
C) Es una aplicación precargada que necesitamos editar para uso personal.

¿Cómo se crea un formulario de usuario?
A) Pestaña Desarrollador, Insertar formulario
B) Visual Basic, Pestaña Insertar, Userform
C) Visual Basic, Módulo, Formulario

¿Cuál es la forma de insertar fórmulas de Excel en VBA?
A) Aplicación.Formulas
B) Aplicación.FormulaBarHeight
C) Application.WorksheetFunction

¿Qué fórmula se hace para detener Excel visible?
A) Aplicación.Quit
B) Application.Visible = False
C) Application.Visible = True

¿Cuáles son las formas de deshabilitar macros o VBA una vez que están
habilitados?
A) Cambie el nombre del archivo, muévalo desde su ubicación y en Pestaña
Desarrollador y Macro Security
B) Pestaña Desarrollador, Seguridad de Macros solamente.
C) No hay manera de hacerlo una vez que están habilitados.

¿Cómo configurar una contraseña para su código VBA?
A) Visual Basic, Herramientas, Opciones, Seguridad, Contraseñas.
B) Visual Basic, Herramientas, Propiedades de VBAProject, Protección,
Contraseñas.
C) Visual Basic, Archivo, Guardar como, Cifrar código VBA, Contraseña.

Interactuando con otras aplicaciones

Abrir otras aplicaciones desde Excel
Microsoft Excel VBA es mucho más potente de lo que hemos visto. Incluso
puede interactuar con otras aplicaciones, como Microsoft Word, Access,
Powerpoint, etc.
Vamos a echar un vistazo a la interacción con otras aplicaciones de VBA.

Para esta práctica, cree el siguiente Formulario:


Añada el siguiente código:

Private Sub cmdAccess_Click()
Application.ActivateMicrosoftApp xlMicrosoftAccess
End Sub

Private Sub cmdOutlook_Click()
Application.ActivateMicrosoftApp xlMicrosoftMail
End Sub

Private Sub cmdPowerPoint_Click()
Application.ActivateMicrosoftApp xlMicrosoftPowerPoint
End Sub

Private Sub cmdWord_Click()
Application.ActivateMicrosoftApp xlMicrosoftWord
End Sub

Se iniciarán las aplicaciones una vez que haga clic en cada botón.

Tal vez quiera iniciar otra aplicación. Intentemos abrir el Bloc de
notas.

Añadir este código a un nuevo botón:
Private Sub CommandButton1_Click()
Dim Task As Double
Task = Shell("notepad.exe", 1)
End Sub

Bien! Abre el Bloc de Notas!



Hagamos algo más interactivo:

Envíar un correo de Outlook desde Excel:
Añade este Código a un botón, modulo o Macro:

Dim OutlookApp As Object
Dim Email As Object
Dim Subject As String
Dim EmailAddress As String
Dim Msg As String


'Crea un Objeto de Outlook
Set OutlookApp = CreateObject("Outlook.Application")

Subject = "This is my subject"
EmailAddress = "email@gmail.com"
Msg = "This is the body message"

‘Crea un e-mail y envíalo

Set Email = OutlookApp.CreateItem(0)
With Email
.to = EmailAddress
.Subject = Subject
.body = Msg
.display
End With

¡Como usted ve prácticamente ha escrito un correo electrónico desde
Excel! Obviamente, puede sustituir los valores de las celdas de Excel, que podría
ser muy beneficioso en caso de que tenga una base de datos con mensajes de
correo electrónico y mensajes. Todo lo que necesita hacer es pensar un poco
acerca de cómo hacer lo que necesita.

En caso de que quiera ver cuántas aplicaciones VBA tiene disponibles para
interactuar, sólo tiene que hacer clic en Herramientas, Referencias.
Toda la lista tiene las aplicaciones con que Excel puede interactuar, pero como
ves la mayoría de ellas están deshabilitados. Esto es sólo una característica de
protección. Si no son suficientes para usted, también puede buscar más.

Visual Basic para Aplicaciones es una gran herramienta y es uno de los
lenguajes de programación más potentes utilizados en el mundo del Análisis. A
medida que aprendes VBA, harás maravillosos proyectos.
¡Has aprendido los fundamentos para usar VBA e incluso crear aplicaciones!
Ahora, depende de usted cómo usar este conocimiento.
Escriba código experimental, cree nuevos proyectos! ¡Hágalo genial!



Respuestas de cuestionarios

Cuestionario 1

¿Cómo se accede a Developer TAB?
A) Haga clic con el botón derecho en la cinta de opciones, personalice
la cinta, active la casilla de verificación para desarrollador y acepte.



Cuestionario 2

¿Qué es una macro?
B) Es un atajo que ejecuta un proceso grabado.
¿Cómo crear una macro?
C) Haciendo clic en el Botón Grabar Macro
¿Para qué sirve referencias relativas?
A) Es para Grabar una Macro sin establecer celdas específicas.
¿Cómo ejecutar una macro?
A) Haciendo clic en el botón Macro
¿Cómo guardar un libro con macros?
B) Recibirá una notificación, en la que deberíamos denegarla y luego
seleccionar guardar como libro de trabajo habilitado para macros.



Cuestionario 3

¿Qué es una variable?
B) Es un valor que cambia.
¿Cuál es el tamaño de almacenamiento de una variable de bytes y su
rango?
C) Almacena 1 byte y va de 0 a 256.
¿Cuál es la ventaja de declarar variables?
A) Consume menos memoria RAM y hace que funcione sin problemas.
¿Es obligatorio declarar variables?
A) Sólo si está activada la opción Requerir declaración de variable
Msgbox devuelve un valor dependiendo del botón pulsado:
B) Devuelve un valor dependiendo del botón pulsado



Cuestionario 4
¿Qué es un procedimiento privado?
C) No se puede llamar desde otra parte del código
¿Qué es un procedimiento público?
A) Significa que puede ser llamado y ejecutado desde cualquier parte del
libro



Cuestionario 5

¿Qué es un formulario de usuario?
A) Es una interfaz visual de una aplicación.

¿Cómo se crea un formulario de usuario?
B) Visual Basic, Pestaña Insertar, Userform
¿Cuál es la forma de insertar fórmulas de Excel en VBA?
C) Application.WorksheetFunction
¿Qué fórmula hace que Excel no sea visible?
B) Application.Visible = False
¿Cuáles son las formas de deshabilitar macros o VBA una vez que
están habilitados?
A) Cambie el nombre del archivo, muévalo desde su ubicación y en
Developer TAB y Macro Security
¿Cómo configurar una contraseña para su código VBA?
B) Visual Basic, Herramientas, Propiedades de VBAProject, Protección,
Contraseñas.
Table of Contents
Introducción
Capítulo 1
Capítulo 2
Capítulo 3
Capítulo 4
Capítulo 5