PROGRAMACIÓN ORIENTADA A OBJETOS (OOP) CON VBA.
((nota: con F1 del Excel se pueden obtener mucha ayuda sobre este lenguaje.))NOTA: EN EL COPIA PEGA HAY QUE MODIFICAR LAS COMILLAS " Y ALGUNAS COMAS POR PUNTOS.
1.-PROGRAMACIÓN ORIENTADA A OBJETOS:
• VBA simplemente
manipula OBJETOS, y cada producto
(Excel, Word, Access, PowerPoint y demás) posee un modelo de objeto
único propio.
• Por ejemplo EXCEL expone varios OBJETOWS de análisis de datos muy potentes como: las hojas de
cálculo, gráficos, tablas
dinámicas, escenarios y numerosas
funciones matemáticas, financieras
y temas generales. Con VBA se puede trabajar con estos objetos y diseñar
procedimientos automatizados.
2.- CLASES.OBJETOS.PROPIEDADES Y MÉTODOS:
- OBJETOS: Son las instancias de una "clase". Combinación de código y datos que se pueden tratar como una unidad, por ejemplo, un control, un formulario o un componente de una aplicación. Cada objeto se define por una clase.
Cuando en el mundo real nos referimos a objeto significa que hablamos de algo abstracto que puede ser cualquier cosa. Por ejemplo podemos referirnos a OBJETOS como coche, silla, casa, etc.
Cuando decimos que la CLASE COCHE representa a todos los coches del mundo significa que define como es un coche, cualquier coche. Es decir, en el argot informático, la clase coche define algo que tiene: cuatro ruedas, un motor, un chasis,... entonces, cualquier objeto real de cuatro ruedas, un motor, un chasis,... es un objeto de la clase coche.
Libros, hojas, rangos, rectángulos, ...son OBJETOS de Excel.
Cualquier objeto tiene características o propiedades como por ejemplo el color, la forma, peso, medidas, etc. Estas PROPIEDADES se definen en la clase y luego se particularizan en cada objeto. Así, en la clase coche se podrían definir las propiedades Color, Ancho y Largo, luego al definir un objeto concreto como coche ya se particularizarían estas propiedades a, por ejemplo, Color = Rojo, Ancho = 2 metros y Largo = 3,5 metros.
Entre las propiedades de un objeto Range están VALUE, que contiene el valor de la celda, 0 también las propiedades COLUMN Y ROW que contienen respectivamente la fila y la columna de la celda, Font que contiene la fuente de los caracteres que muestra la celda, etc.
Range, como objeto, también tiene MÉTODOS, recordemos que los métodos sirven llevar a cabo una acción sobre un objeto. Por ejemplo el MÉTODO ACTIVATE, hace activa una celda determinada, CLEAR, borra el contenido de una celda o rango de celdas, COPY, copia el contenido de la celda o rango de celdas en el portapapeles.
Para referenciar EL OBJETO de una celda se usa la instrucción RANGE:
Workbooks("libro1").worksheet("hoja1").Range("A1")
- OBJETOS DE OBJETOS: Es muy habitual que una propiedad de un objeto sea otro objeto. Siguiendo con el coche, una de las propiedades del coche es el motor, y el motor es un objeto con propiedades como caballos, número de válvulas, etc. y métodos como aumentar_velocidad, coger_combustible, etc.
En Excel, el objeto WorkSheets tiene la propiedad Range que es un objeto, Range tiene la propiedad Font que es también un objeto y Font tiene la propiedad Bold (negrita). Hay que tener muy presente esto porque utilizaremos propiedades de un objeto que serán a su vez objetos. Dicho de otra forma, hay propiedades que devuelven objetos, por ejemplo, la propiedad Range de un objeto WorkSheet devuelve un objeto de tipo Range.
3.-EL EDITOR DE VBA:
2.- CLASES.OBJETOS.PROPIEDADES Y MÉTODOS:
- OBJETOS: Son las instancias de una "clase". Combinación de código y datos que se pueden tratar como una unidad, por ejemplo, un control, un formulario o un componente de una aplicación. Cada objeto se define por una clase.
Cuando en el mundo real nos referimos a objeto significa que hablamos de algo abstracto que puede ser cualquier cosa. Por ejemplo podemos referirnos a OBJETOS como coche, silla, casa, etc.
Cuando decimos que la CLASE COCHE representa a todos los coches del mundo significa que define como es un coche, cualquier coche. Es decir, en el argot informático, la clase coche define algo que tiene: cuatro ruedas, un motor, un chasis,... entonces, cualquier objeto real de cuatro ruedas, un motor, un chasis,... es un objeto de la clase coche.
Libros, hojas, rangos, rectángulos, ...son OBJETOS de Excel.
WorkSheet (OBJETO HOJA de cálculo)
Range (OBJETO CELDA o rango de celdas).
Los objetos están definidos por una CLASE, que son los moldes para crear un objeto: Math, Time, etc. son CLASES en Excel.Cualquier objeto tiene características o propiedades como por ejemplo el color, la forma, peso, medidas, etc. Estas PROPIEDADES se definen en la clase y luego se particularizan en cada objeto. Así, en la clase coche se podrían definir las propiedades Color, Ancho y Largo, luego al definir un objeto concreto como coche ya se particularizarían estas propiedades a, por ejemplo, Color = Rojo, Ancho = 2 metros y Largo = 3,5 metros.
Entre las propiedades de un objeto Range están VALUE, que contiene el valor de la celda, 0 también las propiedades COLUMN Y ROW que contienen respectivamente la fila y la columna de la celda, Font que contiene la fuente de los caracteres que muestra la celda, etc.
Para referenciar EL OBJETO de una celda se usa la instrucción RANGE:
Workbooks("libro1").worksheet("hoja1").Range("A1")
Y para referenciar una de sus PROPIEDADES, como el valor de la celda A1:
WorkSheets(“Hoja1”).Range(“A1”).Value=12345
Y para referenciar un MÉTODO como borar el contenido de un conjunto de celdas:
Range
(“A1:C3”).ClearContents
Excel es un objeto
llamado Applcation y contiene otros objetos como WorkBook y CommandBar. El
objeto WoorkBook puede contener otros objetos como WorkSheet y Chart. Un objeto
WoorkSheet puede contener objetos como Range, PivotTable y demás. Todo ello jerarquizado y separado mediante un punto.
En Excel, el objeto WorkSheets tiene la propiedad Range que es un objeto, Range tiene la propiedad Font que es también un objeto y Font tiene la propiedad Bold (negrita). Hay que tener muy presente esto porque utilizaremos propiedades de un objeto que serán a su vez objetos. Dicho de otra forma, hay propiedades que devuelven objetos, por ejemplo, la propiedad Range de un objeto WorkSheet devuelve un objeto de tipo Range.
3.-EL EDITOR DE VBA:
- -Presionar ALT+F11 o
- -Seleccionar HERRAMIENTAS>MACRO>EDITOR DE VISUAL BASIC o
- -Hace clic sobre el botón EDITOR DE VISUAL BASIC, sitiado en la barra de herramientas de Visual Basic
- Barra de MENÚS
- Barras de HERRAMIENTAS
- Explorador de PROYECTOS. Presenta un diagrama de árbol que contiene cada libro de trabajo que está actualmente abierto en Excel. Cada libro de trabajo es un proyecto. Si esta ventana no está abierta hay que presionar CONTROL+R. Y para esconder la ventana, hay que hacer clic en el botón Cerrar de su narra de título.
- CÓDIGO. Una ventana de código, o ventana de módulo, contiene un código VBA. Cada elemento de un proyecto tiene asociada una ventana de código. Para visualizar una ventana de código para un objeto, hay que hacer doble clic sobre el objeto en la ventana del Explorador de proyectos.
- Ventana INMEDIATO. Esta ventana es útil para ejecutar instrucciones de VBA directamente, probar las instrucciones y limpiar el código. Para abrir esta ventana presione CONTROL+G, para ocultarla basta hacer clic sobre el botón Cerrar de su barra de título.
4.-CÓDIGO. MÓDULOS. PROCEDIMIENTOS. FUNCIONES.
Las acciones de VBA se realizan mediante la ejecución del CÓDIGO VBA. El código VBA se escribe (o se graba) y se guarda en un MÓDULO DE VBA. Un módulo sirve para agrupar procedimientos y funciones. El procedimiento y la función son entidades de programación que sirven para agrupar instrucciones de código que realizan una acción concreta.
Los módulos se guardan en un libro de trabajo de Excel pero se editan o visualizan en el editor de Visual Basic. Para insertar un nuevo módulo: programador>insertar módulo>"módulo1".
En propiedades se puede cambiar su nombre (caption).
Un módulo VBA se compone de PROCEDIMIENTOS. Un procedimiento es un bloque de instrucciones de código que sirven para llevar a cabo alguna tarea específica. Un procedimiento empieza siempre con la instrucción Sub Nombre_Procedimiento y termina con la instrucción End Sub.
En propiedades se puede cambiar su nombre (caption).
Para añadir un nuevo MÓDULO de VBA a un proyecto, hay que seleccionar el nombre del proyecto en la ventana Explorador de proyectos y seleccionar INSERTAR MODULO.
Para quitar un módulo hay que seleccionar el nombre del módulo en la ventana del Explorador de proyectos y elegir ARCHIVO QUITAR.
En general una ventana de código puede soportar cuatro tipos de código:
- PROCEDIMIENTO SUB: Conjuntos de instrucciones que ejecutan alguna acción.
- PROCEDIMIENTO FUNCTION: Es un conjunto de instrucciones que devuelven un solo valor.
- PROCEDIMIENTO PROPERTY: Son procedimientos especiales que se usan en módulos de clase.
- DECLARACIONES: Es información acerca de una variable que se le proporciona aVBA.
Un solo módulo de VBA puede guardar cualquier cantidad de procedimientos Sub, procedimientos Function y declaraciones.
Un módulo VBA se compone de PROCEDIMIENTOS. Un procedimiento es un bloque de instrucciones de código que sirven para llevar a cabo alguna tarea específica. Un procedimiento empieza siempre con la instrucción Sub Nombre_Procedimiento y termina con la instrucción End Sub.
Un PROCEDIMIENTO es básicamente un código de ordenador que realiza alguna acción sobre los objetos o con ellos.
Sub Prueba()
Sum= 1+1
MSGBox “La respuesta es” & Sum
End Sub
Function, Property y Sub son todos tipos de procedimientos. Las FUNCTION devuelven un valor y son llamadas desde un procedimiento previamente definido. Mediante la ventana inferior de "inmediato" se puede ver el resultado del código rápidamente para depurar errores (los procedimientos se escriben directamente con enter y las funciones con ?funcion(parámetros)). Las funciones también quedan definidas en fx de la hoja de cálculo.
Un procedimiento FUNCTION devuelve un solo valor. Se puede llamar una función desde otro procedimiento VBA o usar una fórmula de hoja de cálculo.
Function AñadirDos(arg1, arg2)
AñadirDos= arg1 + arg2
End Function
Function Promedio(n1,n2)
p=(n1+n2)/2End Function
Exit Function. Opcional. Una instrucción que fuerza una salida inmediata del procedimiento Function antes de su conclusión formal.End Function. Requerido. Indica el final del procedimiento function
EJECUCION DE UNA FUNCIÓN DESDE UN PROCEDIMIENTO:
Dim i As Integer , suma As Integer suma = 0
For i = LBound(matriz) To UBound(matriz)
For i = LBound(matriz) To UBound(matriz)
suma = suma + matriz(i)
Next
Next
SumaMatriz = suma
End Function
Sub LlamarSumaMatriz()
End Function
Sub LlamarSumaMatriz()
Dim mat(5) As Integer
Dim SumaTotal As Integer
mat (1) = 4: mat (2) = 5: mat (3) = 8: mat(4) = 1: mat(5) = 2
SumaTotal = SumaMatriz(mat)
MsgBox "La suma de la matriz es: " & SumaTotal
End Sub
Dim SumaTotal As Integer
mat (1) = 4: mat (2) = 5: mat (3) = 8: mat(4) = 1: mat(5) = 2
SumaTotal = SumaMatriz(mat)
MsgBox "La suma de la matriz es: " & SumaTotal
End Sub
Escribamos ahora un
procedimiento Sub llamado Hola y
ejecutémoslo.
Para ejecutar el procedimiento Hola es necesario asegurarse que
el cursor está situado en cualquier parte del texto introducido. Después se
puede optar por uno de los siguientes métodos:
- Presionar F5, o
- Seleccionar Ejecutar, Ejecutar Sub/UserForm, o
- Hacer clic sobre el botón Ejecutar, Ejecutar Sub/UserForm
Sub Hola()
Msg = “Su nombre es “
&Application.UserName & “?”
Ans = MsgBox(Msg, vbYesNo)
If Ans = VbNo Then
MsgBox “No se preocupe”
Else
End If
End Sub
5.-LAS MACROS:
Otra forma de programar
en VBA es usando el GRABADOR DE MACROS.
Cuando se graba una macro, Excel inserta automáticamente un módulo VBA para contener el código grabado.
• Las macros ayudan en
la Automatización de tareas repetitivas. Algunas de las entradas de datos y
formatos que realiza en Microsoft Excel pueden ser repetitivas. Por ejemplo,
podría diseñar la mayoría de sus hojas con las mismas cabeceras básicas, o
formatear todas sus cabeceras de la misma forma. En lugar de ejecutar la misma
secuencia de tareas una y otra vez, puede crear una macro.
• Una macro consta de
una serie de instrucciones escritas en el lenguaje VBA. Aunque para crear
algunas macros no es necesario conocer el lenguaje VBA.
Para ello se utiliza la
opción HERRAMIENTAS MACRO GRABAR NUEVA MACROS.
Las macros se pueden grabar:
• En el libro activo, para que tengan vigencia
solo en ese libro.
• En un libro nuevo
• En el libro de macros
personal para que tenga vigencia siempre que se abre Excel
El siguiente ejemplo
muestra la forma de grabar una macro que simplemente cambia la configuración de
página de orientación vertical a horizontal. Esta secuencia de comandos
generará por sí solo los códigos
necesarios para este procedimiento (a veces
el código generado por este procedimiento es excesivo)
1) Activar una hoja de
cálculo del libro activo
2) Seleccionar el
comando HERRAMIENTAS MACRO GRABAR NUEVA MACRO
3) Hacer cli en Aceptar
para aceptar las opciones predeterminadas
4) Seleccionar el
comando ARCHIVO CONFIGURAR PÁGINA
5) Seleccione la opción
Horizontal y haga clic en Aceptar
6) Haga clic en el
botón detener grabación
Sub Macro1()
' Macro1 Macro
' Macro grabada el 15/11/00 por PRI00
With
ActiveSheet.PageSetup
.Orientation
= xlLandscape
End With
End Sub
6.-LAS VARIABLES:
Un lugar de almacenamiento con nombre que puede contener cierto tipo
de datos que puede ser modificado durante la ejecución del programa. Cada
variable tiene un nombre único que la identifica dentro de su nivel de ámbito.
Puede especificar un tipo de datos o no.
Nombres de variable deben comenzar con un carácter alfabético, deben
ser únicos dentro del mismo ámbito, no deben contener más de 255 caracteres y no
pueden contener un punto o carácter de declaración de tipo.
El propósito principal
de VBA es manipular datos. Algunos residen en objetos tales como rangos de
hojas de cálculo. Otros se guardan en las variables que se crean.
Una variable es una
localización de almacenamiento con nombre, dentro de la memoria del ordenador.
Los tipos de datos son: byte (1byte: 0 a 255),
boolean (2 bytes: v/f), integer (2bytes: -32768 hasta 32767), long (4bytes:
+/-2147483648)), single (4bytes), single(8bytes),date, ob jetc, string.
VARIABLES
LOCALES/PÚBLICAS. Una variable local es una variable declarada dentro de un
procedimiento. Estas variables se pueden usar sólo en el procedimiento en que
se declararon. Cuando el procedimiento finaliza, la variable deja de existir y
Excel libera su memoria.
El ámbito de una
variable puede ser : un procedimiento
(bajo las instrucciones DIM, Static o Private), a nivel módulo (con DIM antes
del primer procedimiento de un módulo), o para todos los módulos (con la
instrucción Public antes del primer procemiento de un módulo).
Ejemplo de variables
locales:
Sub
MiSub()
DIM x As
Integer
DIM First
As Long
DIM
InerestRate As Single
DIM
TodaysDate As Date
DIM
UserName As String * 20
´Aquí se sitúa el código del procedimiento
End Sub
Declarar constantes.
Las constantes se
declaran usando Const.
Const NumTrim As
Integer = 4
Const Interés = 0.05,
Periodo = 12
Const Nombre Mod as
String = “Macros Presupuestos”
Public Const NombreApp
As String = “Aplicación Presupuestos”
LAS CADENAS
Existen dos tipos de
cadenas en VBA:
Cadenas de longitud
fija, que se declaran con un número específi co de caracteres. La máxima
longitud es de 65.536 caracteres.
Cadenas de lingitud
variable, que teóricamente pueden tener hasta 2.000 milones de caracteres.
Dim MiCadena As String * 50
Dim SuCadena As String
LAS FECHAS
Dim Hoy As Date
Dim HoraInicio As Date
Const PrimerDía As Date = #1/1/2001# Const
MedioDía As date = #12:00:00#
ASIGNACIÓN
Una expresión de
asignación es una instrucción de VBA que realiz a evaluaciones matemáticas y
asigna el resultado a una variable o aun objeto.
VBA usa el signo igual
“=“ como operador de asignación.
x = 1
x = x +
1
x = (y * 2) / (z * 2)
FileOpen =
true Range(“Año”). Value = 1995
LOS OPERADORES
MATEMÁTICOS
+ Suma, - Resta, *
Multiplicación, / División, \ División entera, Mod Resto, ^ exponencial, &
Concatenación
LOS OPERADORES
COMPARATIVOS
= Igual, < Menor,
> Mayor, <= Menor o igual, >= Mayor o igual, <> Distinto
LOS OPERADORES LÓGICOS
Not (negación lógica,
And (conjunción lógica), Or (disyunción lógica), XoR (exclusión lógica), Eqv
(equivalencia en dos expresiones), Imp (implicación lógica)
LAS MATRICES (ARRAYS)
Una matriz es un grupo
de elementos del mismo tipo que tienen un nombre común; para referirse a un
elemento específico de una matriz se usa el nombre de la matriz y un número de
índice.
Se puede declarar una
matriz con DIM o Public como cualquier variable.
DIM MiMatriz(1 To 100) As Integer
DIM MiMatriz (100)
MiMatriz(1) = 20
DIM MiMatriz(1 To 100, 1 to 10) As Integer MiMatri z(1,2) =
20
LAS VARIABLES DE OBJETO
Una variable de objeto
es una variable que representa un objeto entero, como puede ser un rango o una
hoja de cálculo.
Las variables de objeto
son importantes por dos razones:
•Pueden simplificar el
código y Pueden hacer que el código se ejecute más de prisa.
Se declaran con DIM o
Public.
Por ejemplo, la
expresión siguiente declara AreaEntradaDatos como un objeto Range. Para ver
como simplifican el código, veamos un ejemplo sin usar variables de objeto:
Sub
VarSinObj();
Worksheets(“Hoja1”).Range(“A1”).Value
= 124
Worksheets(“Hoja1”).Range(“A1”).Font
.Bold = True
Worksheets(“Hoja1”).Range(“A1”).Font
. Italic = True
End Sub
Esta rutina introduce
un valor en la celda A1 de la HOJA1, del libro de trabajo activo, y después
aplica Negrita y cursiva a su contenido. Para reducir el código se puede
condensar la rutina con una variable de objeto.
Sub VarObj();
Dim
MiCelda As Range
Set
Micelda = Worksheets(“Hoja1”).Range(“A1”)
MiCelda.Value
= 124
MiCelda.Font
.Bold = True
MiCelda.Font
. Italic = True
End Sub
7.-SENTENCIAS Y FUNCIONES HABITUALES:
- Option Explicit: esta instrucción obliga a definir todas las variables que se vayan a usar en el programa.
- Dim...As [Integer,Double,String,Boolean...]: Es una instrucción que sirve para definir una variable perfectamente. Si no se usa no pasaría nada pero se utilizaría una mayor cantidad de memoria de la necesaria, con el tipo genérico de Value.El ámbito de una variable determina el módulo y el procedimiento en el que se puede usar una variable. Con las instrucciones Dim, Static o Private dentro del procedimiento se declaran para establecerse dentro de un procedimiento.Con Dim antes del primer procedimiento para establecer la variable dentro de de un módulo. Y para todos los módulos se usará Public antes del primer procedimiento de un módulo. Para las variables locales, se deberán declarar dentro del módulo con DIM, de esta forma cuando el procedimiento finaliza esa variable deja de existir y se liberaliza esa parte de memoria. Las variables estáticas (Static) son un caso especial. Se declaran a nivel de procedimiento y retienen su valor después de que el procedimiento finaliza
- If ...Then....Else....: Es una estructura de control que hace que se ejecuten una serie de instrucciones siempre y cuando se cumpla una determinada condición. Cuendo se utiliza una condición dentro de otra se dice que es un anidamiento de condiciones.
a = InputBox("Ingrese un número") If a > 0 Then
MsgBox "Número Positivo"
End If
End Sub
Sub Positivos_Negativos()
a = InputBox("Ingrese un número")
if a > 0 Then MsgBox "Número Positivo" Else _ MsgBox "Número negativo"
End Sub
Sub Positivos_Negativos_Cero()
a = InputBox("Ingrese un número") If a > 0 Then
MsgBox "Número Positivo" ElseIf a < 0 ThenMsgBox "Número negativo "
ElseIf a = 0 Then
MsgBox " Cero " End If
End Sub
Sub Descuento()
MsgBox IIf(Range("A1") = 0, "Cero", "Distinto de Cero")
End Sub
- Select Case...: Es una estrucura de control que hace que se ejecuten unas eeterminadas instrucciones según el tipo de condición que se cumpla. Es un caso de múltiples condiciones, para evitar repertir muchos IF. Dependiendo del valor de una expresión condición a cumplir, podrá o no ejecutarse una serie de instrucciones.
a = InputBox("Ingrese un número")
Select Case a
Case Is > 0
Msg = "Número Positivo"
Case Is < 0
Msg = "Número negativo"
Case Else
Msg = "Cero" End Select MsgBox Msg
End Sub
Case "": Exit Sub
Case 0 To 24: Descuento = 0.1Case 25 To 49: Descuento = 0.15
Case 50 To 74: Descuento = 0.2
Case Is >= 75: Descuento = 0.25
End Select
MsgBox "Descuento: " & Descuento
End Sub
Sum = 0
For Count = 0 To 10
Sum = Sum + Count
Next Count
MsgBox Sum
End Sub
Sub SumaNúmerosPares
Sum = 0
For Count = 0 To 10 Step 2
Sum = Sum + Count
Next Count
MsgBox Sum
Msg = "Número negativo"
Case Else
Msg = "Cero" End Select MsgBox Msg
End Sub
Sub Descuento1()
Cantidad = InputBox("Introducir cantidad: ") Select Case Cantidad Case "": Exit Sub
Case 0 To 24: Descuento = 0.1Case 25 To 49: Descuento = 0.15
Case 50 To 74: Descuento = 0.2
Case Is >= 75: Descuento = 0.25
End Select
MsgBox "Descuento: " & Descuento
End Sub
- For ...To...Next: Es una estrucura de control que hace repetir unas instrucciones un número determinado de veces hasta agotar el intervalo de acumulación del contador que le hayamos establecido.La cuenta se puede especificar con STEP. Es necesario usar variables para la acumulación y éstas deberán ser diferentes en el caso de bucles anidados.
Sum = 0
For Count = 0 To 10
Sum = Sum + Count
Next Count
MsgBox Sum
End Sub
Sub SumaNúmerosPares
Sum = 0
For Count = 0 To 10 Step 2
Sum = Sum + Count
Next Count
MsgBox Sum
End Sub
Sub BuclesAnidados
Dim MiMatriz (1 To 3, 1 To 3)
Dim MiMatriz (1 To 3, 1 To 3)
For i = 1 To 3
For j = 1 to 3
MiMatriz (i,j) = 2
Next j
Next i
End Sub
Do While IsEmpty(ActiveCell)
For j = 1 to 3
MiMatriz (i,j) = 2
Next j
Next i
End Sub
- Do While...Loop: Es una estructura de control que hace repetir unas instrucciones un número indefinido de veces mientras que se cumpla una determinada condición. En esta ocasión para que el bucle se inicie por primera vez es necesario que la condición se cumpla previamente. Puede ocurrir que ni siquiera se inicie el bucle. Es este tipo de bucles es necesario declarar y asignar un valor a las variables del contador, previamente.
Mienrtras la celda esté vacía va desplazandose hacia abajo y asigando el valor 0.
Sub DoWhileDemo() Do While IsEmpty(ActiveCell)
ActiveCell. Value = 0
ActiveCell.Offset (1, 0).Select
Loop
End Sub
ActiveCell. Value = 0
ActiveCell.Offset (1, 0).Select
Loop Until Not IsEmpty (ActiveCell)
ActiveCell.Offset (1, 0).Select
Loop
End Sub
- Do Until... Loop: Es una estructura de control que hace repetir unas instrucciones un número indefinido de veces hasta que una condición llegue a ser True. Hay que tener cuidado en poner claramente el contador que delimite cuando debe salir del bucle, de lo contrario se puede quedar sin salida.
ActiveCell. Value = 0
ActiveCell.Offset (1, 0).Select
Loop Until Not IsEmpty (ActiveCell)
End Sub
With Selection.Font
.Name = “Times New Roman”
.FontStyle = “ Bold Italic”
.Size = 12
.Underline = xlSingle
.ColorIndex = 5
End With
End Sub
MsgBox Worksheets("Hoja1").Range("A1").Value
End Sub
DESARROLLO DE EJEMPLOS EN EL EDITOR DE VBA:
1.- "Hola Mundo".
REM Mi primer procedimiento HolaMundo
Sub MiPrimerProcedimiento
Range("A1").Value = "Hola"
End Sub
En este caso podríamos haber puesto lo siguiente (es más larga pero especifica todos los objetos afectados):
O también si queremos hacer referencia a la hoja activa:
O si se quiere poner en la hoja activa de la celda activa:
Y si quisieramos toda la jerarquía completa:
2.- "Hola Mundo" con un BOTÓN.
Primero activamos en Excel:
Archivo>Opciones>MásFrecuentes>VisualizarProgramador.
Después:
Insertar>ActiveX>Botón
Es necesario activar la opción de Excel de "Controloes de ActiveX", ya que de esta forma se podrá cambiar el color y otras opciones del propio botón.
Seleccionamos dentro de los procedimientos de Controles de ActiveX el botón y modificamos su código a:
Private Sub CommandButton_Click()
Hoja1.Cells(1,1)="Hola Mundo"
End Sub
2.b.- "Hola Mundo" recursivamente...con un BOTÓN.
Ahora modificaremos el código para que aparezca el texto en la misma celda de forma recursiva tantas veces comos se pulse el botón:
Private Sub CommandButton_Click()
Hoja1.Cells(1,1)=Hoja1.Cells(1,1)+"HOLA"
End Sub
Y por último, modificarmos el cógido para que aparezca el código en varias celdas en diagonal sucesivas:
Private Sub CommandButton1_Click()
Dim i As Integer
Dim j As Integer
Hoja1.Cells(1, 1) = "BIENVENIDO"
For i = 2 To 8
For j = 1 To i
If ((i + j) Mod 2) = 0 Then
Hoja1.Cells(i, j) = Hoja1.Cells(1, 1)
End If
Next j
Next i
End Sub
3.- REPRESENTACIÓN DE SERIES.
(en este caso te pedirá grabar la macro con un nombre)
Vamos a representar LA SERIE DE FIBONACCI: a(n+2)=a(n+1)+a(n)
Private Sub CommandButton1_Click()
Hoja1.Cells(1, 1) = Int(Rnd() * 10)
Hoja1.Cells(2, 1) = Int(Rnd() * 10)
i = 1
Do While i < 21
Hoja1.Cells(i + 2, 1) = Hoja1.Cells(i + 1, 1) + Hoja1.Cells(i, 1)
Hoja1.Cells(i, 1).Select
i = i + 1
Loop
End Sub
Y lo mismo pero con un poco de color:
Private Sub CommandButton1_Click()
Hoja1.Cells(1, 1) = Int(Rnd() * 10)
Hoja1.Cells(2, 1) = Int(Rnd() * 10)
i = 1
Do While i < 21
Hoja1.Cells(i + 2, 1) = Hoja1.Cells(i + 1, 1) + Hoja1.Cells(i, 1)
Hoja1.Cells(i, 1).Select
With Selection.Interior
.ColorIndex = Int(Rnd() * 10)
.Pattern = xlSolid
End With
i = i + 1
Loop
End Sub
4.- NÚMERO PRIMO
Private Sub CommandButton1_Click()
Dim valor As Integer
valor = InputBox("Dime un número:")
Dim primo As Boolean
If EsPrimo(valor) Then MsgBox ("Es PRIMO") Else MsgBox ("No es primo")
End Sub
Function EsPrimo(x) As Boolean
Dim n As Integer
EsPrimo = True
n = 2
Do While EsPrimo And n <= Sqr(x)
If (x Mod n = 0) Then
EsPrimo = False
End If
n = n + 1
Loop
End Function
5.-COORDENADAS POLARES CON BOTÓN:
Private Sub CommandButton1_Click()
Hoja1.Cells(1, 1) = "Coordenada x:"
Hoja1.Cells(2, 1) = "Coordenada y:"
If Hoja1.Cells(2, 1) <> "" And Hoja1.Cells(2, 2) <> "" Then
c1 = Hoja1.Cells(1, 2)
c2 = Hoja1.Cells(2, 2)
d = c2 / c1
hipotenusa = Sqr((c1 ^ 2) + (c2 ^ 2))
alfa = Atn(d) * (180 / 3.141516)
Hoja1.Cells(1, 3) = "Argumento:"
Hoja1.Cells(1, 4) = hipotenusa
Hoja1.Cells(2, 3) = "Ángulo:"
Hoja1.Cells(2, 4) = alfa
End If
End Sub
EJEMPLOS SENCILLOS:
CÓDIGO ESCRITO EN EL CUADRO DE CONTROL (ACTIVEX)
REM pregunta (con asignación)
Sub Pregunta()
Dim suNombre As String
suNombre = InputBox("¿Cómo se llama?")
MsgBox "Su nombre es " & suNombre
End Sub
REM pregunta (con la instrucción de asignación SET para objetos)
Sub DarFormato()
Dim miCelda As Range
Set miCelda = Worksheets("Hoja1").Range("A1")
With miCelda.Font
.Bold = True
.Italic = True
End With
End Sub
REM Celda con texto y formato
REM Suma
Sub suma()
s = 4 + 6
MsgBox "la suma es:" & s
End Sub
REM Hola con condicional
' Declara un procedimiento llamado ObtenInformacion
' Este procedimiento Sub no acepta argumentos
Sub ObtenInformacion()
' Declara una variable de cadena llamada respuesta
Dim respuesta As String
' Asigna el valor que devuelve la funcion InputBox a la variable respuesta
respuesta = InputBox(Prompt:="¿Cómo se llama?")
' Instrucción condicional If...Then...Else
If respuesta = Empty Then
' Llama a la función MsgBox
MsgBox Prompt:="No ha escrito su nombre."
Else
' Función MsgBox concatenada con la variable respuesta
MsgBox Prompt:="Su nombre es " & respuesta
' Fin de la instrucción If...Then...Else
End If
' Fin del procedimiento Sub
End Sub
REM Descuento2
Sub Ej12()
Dim Producto As String
Dim Cantidad As Integer
Dim Precio As Single
Dim Total As Single
Dim Descuento As Single
Dim Total_Descuento As Single
Producto = InputBox("Entrar Nombre del Producto", "Entrar")
Precio = Val(InputBox("Entrar el precio", "Entrar"))
Cantidad = Val(InputBox("Entrar la cantidad", "Entrar"))
Total = Precio * Cantidad
ActiveSheet.Range("A1").Value = Producto
ActiveSheet.Range("A2").Value = Precio
ActiveSheet.Range("A3").Value = Cantidad
ActiveSheet.Range("A4").Value = Total
' Si total mayor que 10.000 y el producto es Patatas, aplicar descuento.
If Total > 10000 And Producto = "Patatas" Then
End If
Descuento = Val(InputBox("Entrar Descuento", "Entrar"))
Total_Descuento = Total * (Descuento / 100)
Total = Total - Total_Descuento
ActiveSheet.Range("A5").Value = Total_Descuento
ActiveSheet.Range("A6").Value = Total
End Sub
REM FACTORIAL (usando la recursividad, solo permitida en estos casos)
Function Factorial(N)
If N <= 1 Then ' Se ha llegado al fin de las llamadas recursivos.
Factorial = 1 ' (N = 0) abandona las llamadas.
Else ' Llama nuevamente a Factorial si N > 0.
Factorial = Factorial(N - 1) * N
End If
End Function
EJEMPLO: Comisión condicional
Una primera forma de hacerlo en excel sería esta:
=si(Y(A1>00,A1<=9999,99),A1*0,08, si(Y(A1>=10000,A1>=19999,99),A 1*0,105, si(Y(A1>=20000,A1<=39999,99),A1*0,12, si(A1>=40000,A1*0,14,0))))
- With: Es una estructura de control que permite ejecutar una serie de instrucciones sin necesidad de recalificar un objeto, es decir, sobre le mismo objeto cada vez.
With Selection.Font
.Name = “Times New Roman”
.FontStyle = “ Bold Italic”
.Size = 12
.Underline = xlSingle
.ColorIndex = 5
End With
End Sub
- InputBox("Dime un número"): Es una instrucción que se usa para a través de un mensaje popup poder introducir datos para su posterior uso en el programa.
- MsgBox("Hola"): Es una salida de texto utilizando una ventaja de mensajes del tipo popup. Vemos como el siguiente procedimiento lee el valor de la cenda A1 y representa su contenido en una ventana de mensaje tipo MsgBox.
MsgBox Worksheets("Hoja1").Range("A1").Value
End Sub
- Application.Max(Rango): Aplicación que calcula el valor máximo de un rango de celdas.
- Selection.Interior.ColorIndex=34: es un código que daría a al celda activa un valor determinado de grado de color.
- Selection.Interior.Pattern=xlsolid: es un código que daría a al celda activa un valor determinado formato de texto.
DESARROLLO DE EJEMPLOS EN EL EDITOR DE VBA:
1.- "Hola Mundo".
REM Mi primer procedimiento HolaMundo
Sub MiPrimerProcedimiento
Range("A1").Value = "Hola"
End Sub
En este caso podríamos haber puesto lo siguiente (es más larga pero especifica todos los objetos afectados):
WorkSheets(1).Range("A1").Value = "Hola"
O también si queremos hacer referencia a la hoja activa:
ActiveSheet.Range("A1").Value = "Hola"
O si se quiere poner en la hoja activa de la celda activa:
ActiveSheet.ActiveCell.Value = "Hola"
Y si quisieramos toda la jerarquía completa:
Application.WorkBooks(1).WorkSheets(1).Range("A1").Value = "Hola"
2.- "Hola Mundo" con un BOTÓN.
Primero activamos en Excel:
Archivo>Opciones>MásFrecuentes>VisualizarProgramador.
Después:
Insertar>ActiveX>Botón
Es necesario activar la opción de Excel de "Controloes de ActiveX", ya que de esta forma se podrá cambiar el color y otras opciones del propio botón.
Seleccionamos dentro de los procedimientos de Controles de ActiveX el botón y modificamos su código a:
Private Sub CommandButton_Click()
Hoja1.Cells(1,1)="Hola Mundo"
End Sub
2.b.- "Hola Mundo" recursivamente...con un BOTÓN.
Ahora modificaremos el código para que aparezca el texto en la misma celda de forma recursiva tantas veces comos se pulse el botón:
Private Sub CommandButton_Click()
Hoja1.Cells(1,1)=Hoja1.Cells(1,1)+"HOLA"
End Sub
Y por último, modificarmos el cógido para que aparezca el código en varias celdas en diagonal sucesivas:
Private Sub CommandButton1_Click()
Dim i As Integer
Dim j As Integer
Hoja1.Cells(1, 1) = "BIENVENIDO"
For i = 2 To 8
For j = 1 To i
If ((i + j) Mod 2) = 0 Then
Hoja1.Cells(i, j) = Hoja1.Cells(1, 1)
End If
Next j
Next i
End Sub
3.- REPRESENTACIÓN DE SERIES.
(en este caso te pedirá grabar la macro con un nombre)
Vamos a representar LA SERIE DE FIBONACCI: a(n+2)=a(n+1)+a(n)
Private Sub CommandButton1_Click()
Hoja1.Cells(1, 1) = Int(Rnd() * 10)
Hoja1.Cells(2, 1) = Int(Rnd() * 10)
i = 1
Do While i < 21
Hoja1.Cells(i + 2, 1) = Hoja1.Cells(i + 1, 1) + Hoja1.Cells(i, 1)
Hoja1.Cells(i, 1).Select
i = i + 1
Loop
End Sub
Y lo mismo pero con un poco de color:
Private Sub CommandButton1_Click()
Hoja1.Cells(1, 1) = Int(Rnd() * 10)
Hoja1.Cells(2, 1) = Int(Rnd() * 10)
i = 1
Do While i < 21
Hoja1.Cells(i + 2, 1) = Hoja1.Cells(i + 1, 1) + Hoja1.Cells(i, 1)
Hoja1.Cells(i, 1).Select
With Selection.Interior
.ColorIndex = Int(Rnd() * 10)
.Pattern = xlSolid
End With
i = i + 1
Loop
End Sub
4.- NÚMERO PRIMO
Private Sub CommandButton1_Click()
Dim valor As Integer
valor = InputBox("Dime un número:")
Dim primo As Boolean
If EsPrimo(valor) Then MsgBox ("Es PRIMO") Else MsgBox ("No es primo")
End Sub
Function EsPrimo(x) As Boolean
Dim n As Integer
EsPrimo = True
n = 2
Do While EsPrimo And n <= Sqr(x)
If (x Mod n = 0) Then
EsPrimo = False
End If
n = n + 1
Loop
End Function
5.-COORDENADAS POLARES CON BOTÓN:
Private Sub CommandButton1_Click()
Hoja1.Cells(1, 1) = "Coordenada x:"
Hoja1.Cells(2, 1) = "Coordenada y:"
If Hoja1.Cells(2, 1) <> "" And Hoja1.Cells(2, 2) <> "" Then
c1 = Hoja1.Cells(1, 2)
c2 = Hoja1.Cells(2, 2)
d = c2 / c1
hipotenusa = Sqr((c1 ^ 2) + (c2 ^ 2))
alfa = Atn(d) * (180 / 3.141516)
Hoja1.Cells(1, 3) = "Argumento:"
Hoja1.Cells(1, 4) = hipotenusa
Hoja1.Cells(2, 3) = "Ángulo:"
Hoja1.Cells(2, 4) = alfa
End If
End Sub
EJEMPLOS SENCILLOS:
CÓDIGO ESCRITO EN EL CUADRO DE CONTROL (ACTIVEX)
REM pregunta (con asignación)
Sub Pregunta()
Dim suNombre As String
suNombre = InputBox("¿Cómo se llama?")
MsgBox "Su nombre es " & suNombre
End Sub
REM pregunta (con la instrucción de asignación SET para objetos)
Sub DarFormato()
Dim miCelda As Range
Set miCelda = Worksheets("Hoja1").Range("A1")
With miCelda.Font
.Bold = True
.Italic = True
End With
End Sub
REM Celda con texto y formato
Sub Segundo
ActiveSheet.Range("A1").Value = "Hola"
ActiveSheet.Range("A1").Font.Bold = True
ActiveSheet.Range("A1").Font.Color = RGB(255,0,0)
End Sub
REM Rango con texto y formato
Sub Segundo_b
ActiveSheet.Range("A1:A8").Value = "Hola"
ActiveSheet.Range("A1:A8").Font.Bold = True
ActiveSheet.Range("A1:A8").Font.Color = RGB(255,0,0)
End Sub
REM Introdución de texto
Sub Entrar_Valor
Dim Texto As String
' Chr(13) sirve para que el mensaje se muestre en dos Líneas
Texto = InputBox("Introducir un texto " & Chr(13) & "Para la celda A1", "Entrada de datos") ActiveSheet.Range("A1").Value = Texto
End Sub
REM Introducción de texto sin usar variables
Sub Entrar_Valor
ActiveSheet.Range("A1").Value = InputBox("Introducir un texto " & Chr(13) & "Para la celda A1", "Entrada de datos")
End Sub
REM Introducción texto y elección celda
Option Explicit
Sub Entrar_Valor
Dim Celda As String
Dim Texto As String
Celda = InputBox("En que celda quiere entrar el valor", "Entrar Celda")
Texto = InputBox("Introducir un texto " & Chr(13) & "Para la celda " & Celda , "Entrada de datos") ActiveSheet.Range(Celda).Value = Texto
End Sub
REM Sumar
ActiveSheet.Range("A1").Value = "Hola"
ActiveSheet.Range("A1").Font.Bold = True
ActiveSheet.Range("A1").Font.Color = RGB(255,0,0)
End Sub
REM Rango con texto y formato
Sub Segundo_b
ActiveSheet.Range("A1:A8").Value = "Hola"
ActiveSheet.Range("A1:A8").Font.Bold = True
ActiveSheet.Range("A1:A8").Font.Color = RGB(255,0,0)
End Sub
REM Introdución de texto
Sub Entrar_Valor
Dim Texto As String
' Chr(13) sirve para que el mensaje se muestre en dos Líneas
Texto = InputBox("Introducir un texto " & Chr(13) & "Para la celda A1", "Entrada de datos") ActiveSheet.Range("A1").Value = Texto
End Sub
REM Introducción de texto sin usar variables
Sub Entrar_Valor
ActiveSheet.Range("A1").Value = InputBox("Introducir un texto " & Chr(13) & "Para la celda A1", "Entrada de datos")
End Sub
REM Introducción texto y elección celda
Option Explicit
Sub Entrar_Valor
Dim Celda As String
Dim Texto As String
Celda = InputBox("En que celda quiere entrar el valor", "Entrar Celda")
Texto = InputBox("Introducir un texto " & Chr(13) & "Para la celda " & Celda , "Entrada de datos") ActiveSheet.Range(Celda).Value = Texto
End Sub
REM Sumar
Option Explicit
Sub Sumar()
Dim Numero1 As Integer
Dim Numero2 As Integer
Numero1 = InputBox("Entrar el primer valor", "Entrada de datos")
Numero2 = InputBox("Entrar el primer valor", "Entrada de datos")
Range("A1").Value = Numero1 + Numero2
End Sub
REM Suma
Sub suma()
s = 4 + 6
MsgBox "la suma es:" & s
End Sub
REM Hola en un rango
Sub obj()
Dim R As Range
Set R = ActiveSheet.Range("A10:B15")
R.Value = "Hola"
R.Font.Bold = True
End Sub
REM Hola con condicional
' Declara un procedimiento llamado ObtenInformacion
' Este procedimiento Sub no acepta argumentos
Sub ObtenInformacion()
' Declara una variable de cadena llamada respuesta
Dim respuesta As String
' Asigna el valor que devuelve la funcion InputBox a la variable respuesta
respuesta = InputBox(Prompt:="¿Cómo se llama?")
' Instrucción condicional If...Then...Else
If respuesta = Empty Then
' Llama a la función MsgBox
MsgBox Prompt:="No ha escrito su nombre."
Else
' Función MsgBox concatenada con la variable respuesta
MsgBox Prompt:="Su nombre es " & respuesta
' Fin de la instrucción If...Then...Else
End If
' Fin del procedimiento Sub
End Sub
REM Descuento
Sub Condicional()
ActiveSheet.Range("A1").Value = 0
' Poner las celdas donde se guardan los
valores 0.
ActiveSheet.Range("A2").Value = 0
ActiveSheet.Range("A3").Value = 0
ActiveSheet.Range("A1").Value = Val(InputBox("Entrar el precio", "Entrar"))
' Si el valor de la celda A1 es mayor que 1000, entonces, pedir descuento
If ActiveSheet.Range("A1").Value > 1000 Then
ActiveSheet.Range("A2").Value = Val(InputBox("Entrar Descuento", "Entrar"))
End If
ActiveSheet.Range("A3").Value = ActiveSheet.Range("A1").Value - _
ActiveSheet.Range("A2").Value
End Sub
REM Descuento2
Option Expl icit
Sub Condicional()
Dim Precio As Integer
Dim Descuento As Integer
Precio = 0
Descuento = 0
Precio = Val(InputBox("Entrar el precio", "Entrar"))
' Si el valor de la variable precio es mayor que 1000, entonces, pedir descuento
If Precio > 1000 Then
Descuento = Val(InputBox("Entrar Descuento", "Entrar"))
End If
ActiveSheet.Range("A1").Value = Precio
ActiveSheet.Range("A2").Value = Descuento
ActiveSheet.Range("A3").Value = Precio – Descuento
End Sub
REM descuento3
Sub Condicional_Else()
Dim Precio As Single
Dim Descuento As Single
Precio = 0
Precio = Val(InputBox("Entrar el precio", "Entrar"))
' Si el valor de la variable precio es mayor que 1000, entonces, aplicar
descuento del 10%
If Precio > 1000 Then
Descuento = Precio * (10 / 100)
ActiveSheet.Range("A2").Value = 0,1
Else ' Sino ? Aplicar descuento del 5%
End If
Descuento = Precio * (5 / 100)
ActiveSheet.Range("A2").Value = 0,05
ActiveSheet.Range("A1").Value = Precio
ActiveSheet.Range("A3").Value = Descuento
ActiveSheet.Range("A4").Value = Precio - Descuento
End Sub
Sub Condicional_Else2()
ActiveSheet.Range("A3").Value = AvtiveSheet.Range("A1").Value - _
ActiveSheet.Range("A2").Value
If ActiveSheet("A3").Value < 0 Then
Else
End If
End Sub
ActiveSheet.Range("A3").Font.Color = RGB(255,0,0)
ActiveSheet.Range("A3").Font.Color = RGB(0,0,255)
Sub Condicional()
If ActiveSheet.Range("A1").Value = ActiveSheet.Range("A2").Value Then
Else
End If
End Sub
ActiveSheet.Range("A3").Value = "Los Valores de A1 y A2 son iguales"
If ActiveSheet.Range("A1").Value > ActiveSheet.Range("A2").Value Then
Else
ActiveSheet.Range("A3").Value = "A1 mayor que A2"
ActiveSheet.Range("A3").Value = "A2 mayor que A1"
End If
REM DESCUENTO CONDICIONAL
Dim Producto As String
Dim Cantidad As Integer
Dim Precio As Single
Dim Total As Single
Dim Descuento As Single
Dim Total_Descuento As Single
Producto = InputBox("Entrar Nombre del Producto", "Entrar")
Precio = Val(InputBox("Entrar el precio", "Entrar"))
Cantidad = Val(InputBox("Entrar la cantidad", "Entrar"))
Total = Precio * Cantidad
ActiveSheet.Range("A1").Value = Producto
ActiveSheet.Range("A2").Value = Precio
ActiveSheet.Range("A3").Value = Cantidad
ActiveSheet.Range("A4").Value = Total
' Si total mayor que 10.000 y el producto es Patatas, aplicar descuento.
If Total > 10000 And Producto = "Patatas" Then
End If
Descuento = Val(InputBox("Entrar Descuento", "Entrar"))
Total_Descuento = Total * (Descuento / 100)
Total = Total - Total_Descuento
ActiveSheet.Range("A5").Value = Total_Descuento
ActiveSheet.Range("A6").Value = Total
End Sub
Sub Ejemplo_13()
Dim Producto As String
Dim Cantidad As Integer
Dim Precio As Single
Dim Total As Single
Dim Descuento As Single
Dim Total_Descuento As Single
Precio = 0
Producto = InputBox("Entrar Nombre del Producto","Entrar")
Precio = Val(InputBox("Entrar el precio", "Entrar"))
Precio = Val(InputBox("Entrar la cantidad", "Entrar"))
Total = Precio * Cantidad
ActiveSheet.Range("A1").Value = Producto
ActiveSheet.Range("A2").Value = Precio
ActiveSheet.Range("A3").Value = Cantidad
ActiveSheet.Range("A4").Value = Total
If Total > 10000 Or Producto = "Patatas" Then
End If
Descuento = Val(InputBox("Entrar Descuento", "Ent rar"))
Total_Descuento = Total * (Descuento / 100)
Total = Total - Total_Descuento
ActiveSheet.Range("A5").Value = Total_Descuento
ActiveSheet.Range("A6").Value = Total
End If
End Sub
Sub Ejemplo_14()
Dim Precio As Integer
Dim Descuento As Integer
Precio = 0
Descuento = 0
Precio = Val(InputBox("Entrar el precio", "Entrar"))
' Si el valor de la variable precio NO es menor igual 1000, entonces, pedir
descuento
If Not (Precio <= 1000) Then
End If
Descuento = Val(InputBox("Entrar Descuento", "Entrar"))
ActiveSheet.Range("A1").Value = Precio
ActiveSheet.Range("A2").Value = Descuento
ActiveSheet.Range("A3").Value = Precio - Descuento
End Sub
Sub Ejemplo_15()
Dim Signo As String
Dim Valor1 As Integer, Valor2 As Integer, Total As Integer
Valor1 = ActiveSheet.Range("A1").Value
Valor2 = ActiveSheet.Range("A2").Value
Signo = ActiveSheet.Range("B1").Value
Total=0
If Signo = "+" Then
End if
Total = Valor1 + Valor2
If Signo = "-" Then
End if
Total = Valor1 - Valor2
End if
If Signo = "x" Then
End if
Total = Valor1 * Valor2
If Signo = ":" Then
End if
Total = Valor1 / Valor2
ActiveCell.Range("A3").Value = Total
End Sub
REM FACTORIAL (usando la recursividad, solo permitida en estos casos)
Function Factorial(N)
If N <= 1 Then ' Se ha llegado al fin de las llamadas recursivos.
Factorial = 1 ' (N = 0) abandona las llamadas.
Else ' Llama nuevamente a Factorial si N > 0.
Factorial = Factorial(N - 1) * N
End If
End Function
EJEMPLO: Comisión condicional
Una primera forma de hacerlo en excel sería esta:
=si(Y(A1>00,A1<=9999,99),A1*0,08, si(Y(A1>=10000,A1>=19999,99),A 1*0,105, si(Y(A1>=20000,A1<=39999,99),A1*0,12, si(A1>=40000,A1*0,14,0))))
Pero resulta demasiado larga y compleja de entender... lo mejor sería hacerlo por código:
Function Comision(Ventas)
Const porcentaje1 = 0.08
Const porcentaje2 = 0.105Const porcentaje3 = 0.12
Const porcentaje4 = 0.14
Select Case Ventas
Case 0 To 9999.9: Comision = Ventas * porcentaje1
Case 1000 To 19999.9: Comision = Ventas * porcentaje2
Case 20000 To 39999.9: Comision = Ventas * porcentaje3
Case Is >= 40000: Comision = Ventas * porcentaje4
End Select
End Function
Sub CalcComm()
sales = InputBox("Introducir Ventas: ")
MsgBox "La comisión es: " & Comision(sales)
End Sub