martes, 15 de septiembre de 2015

Excel macros, proyecto 002

Articulo en borrador, el contenido se esta editando buscando mejorar el formato y la sintaxis, de todas formas no se esperan cambios que impliquen conceptos diferentes.
Contenido
Introducción.
Alcance.
Referencias.
Términos y definiciones.
Contexto de la organización
Soporte
Operación

Introducción

Introducir datos en una planilla de calculo, sin omisiones y con integridad de datos.

Alcance

Se hará una método de ingreso de datos que permite cierto intercambio de información, dando la posibilidad de establecer una comunicación con el digitador en el momento que tiene que ingresar los datos.
Algunos datos son procesados según rangos.

Referencias

PROGRAMAS EMPLEADOS
Nombre del programa Empleo
Microsoft Word Elaboración del texto
Microsoft Visio Elaboración de la ilustracion
Microsoft Excel Elaboración del proyecto que se describe

ESTRUCTURAS Y FUNCIONES EMPLEADAS EN EL CÓDIGO
Nombre Linea de código
Option Explicit0,01

Términos y definiciones

Macro, Secuencia de acciones dentro de la aplicación que el usuario activa pulsando una combinación específica de teclas o un botón dibujado en la planilla.
Paréntesis para definir rangos, el paréntesis recto define si el dato esta incluido y el curvo definen si el dato no está incluido. Ejemplo, x pertenece al rango definido por la expresión “[1,6- 1,7)” es equivalente a la expresión “1,6 >=x<1,7”, que se define como, x es mayor e igual a 1,6 y menor a 1,7, si x=1,7, x no pertenece al rango, si x=1,6, x pertenece al rango.

Contexto de la organización

Se deben ingresar empleados y calcular sueldos, con el criterio de pertenecer o no a un cierto rango de valores.

Soporte

P.C., Sistema Windows, programa Microsoft Excel 2010

Operación

Cuando abra el archivo deberá aceptar la ejecución de macros, Excel realiza una advertencia ya que con la funcionalidad de los macros pueden hacerse virus, este código es de mi autoría y esta 100% libre de virus.
Se empleara un macro para generar la comunicación con el digitador, una serie de ventanas emergentes lo ira guiando en el proceso de ingreso de datos.

Ingreso de datos

Al presionar el botón, ingresar nuevo, se abre en primer plano una ventana que nos pide ingresar los siguientes datos
  1. nombre y el apellido
  2. dirección
  3. ciudad (donde reside)
  4. sueldo nominal
  5. fecha de ingreso a la empresa

 Cálculo y/o validación de datos

  1. nombre y el apellido, no permite ingresar un campo en blanco.
  2. dirección, no permite ingresar un campo en blanco.
  3. ciudad (donde reside), si el dato es "Montevideo", se pondrá capital, si no se pondrá interior.
  4. sueldo nominal, se determina el aporte según la tabla 1

    TABLA PARA DETERMINAR EL APORTE
    SMN
    Aporte
    [0-3)
    SMN
    00 %
    [3-6)
    SMN
    18 %
    [6-10)
    SMN
    20 %
    [10-12)
    SMN
    24 %
    Más de 12
    SMN
    26 %
    tabla 1
  5. fecha de ingreso a la empresa, se determina la antigüedad según la tabla 2
    TABLA PARA DETERMINAR ANTIGÜEDAD
    Antigüedad
    Incentivo
    [0-5)
    años
    0 %
    [5-7)
    años
    2 %
    [7-9)
    años
    4 %
    [9-10)
    años
    6 %
    Más de 10
    años
    8 %
    tabla 2

Consideraciones

SMN sera U$ 10.000.

Volcado de datos

Mostrar el aporte de cada empleado en una columna.
Mostrar el líquido de cada empleado sumando Sueldo Nominal + Antigüedad – Aportes.
Al finalizar los datos son volcados en la planilla debajo del último dato ingresado.

Diagrama de flujo 

Procedimiento para el volcado de datos Ilustración 1.

Diagrama de flujo de la interfaz de Ilustración 2.

Código


0.01 Option Explicit
0.02 ' Option explicit obliga de definir las variables al principio del codigo
0.03
0.04 Sub e01()
0.05
0.06 Dim NomApe As String
0.07 'Nombre y Apellido
0.08 Dim Direccion As String
0.09 'Direccion
0.10 Dim Ciudad As String
0.11 'ciudad
0.12 Dim SueNom As Long
0.13 'sueldo nominal
0.14 Dim Ince As Long
0.15 'calculo del incentivo
0.16 Dim Aportes As Long
0.17 'calculo de aportes
0.18 Dim SueLiq As Long
0.19 'caluclo del sueldo liquido
0.20 Dim vtotal As Long
0.21 'sueldo
0.22 Dim FecIng As Date
0.23 'Se toma con opcion crear las siguientes variables
0.24 Dim Ant As Long
0.25 'antiguedad del empleado en años
0.26 Dim SMN As Long
0.27 'valor del salario minimo nacional
0.28 Dim vaportes As Long
0.29 'Monto de los aportes
0.30 Dim vfilas As Integer
0.31 'para ingresar un dato abajo del ultimo
0.32 Dim continuar As String
0.33
0.34 SMN = 1242
0.35 'Titulos
0.36
0.37 'Formato de los titulos
0.38
0.39 Range("a1:i1").WrapText = True
0.40 Range("a1:i1").Font.Bold = True
0.41 Range("a1:i1").Font.Size = 12
0.42 Range("a1:i1").Interior.Color = RGB(225, 225, 225)
0.43 Range("a1:i1").RowHeight = 30
0.44 Range("a1:i1").HorizontalAlignment = xlGeneral
0.45 Range("a1:i1").VerticalAlignment = xlCenter
0.46
0.47 'esta ultima sentencia la agrego porque no me ajustaba las columanas en la sentencia Columns("a:i").EntireColumn.AutoFit, cuando
0.48 'el titulo quedaba en una columna mas chica y el texto del titulo en 2 lineas
0.49
0.50 [a1] = "Nombre y Apellido"
0.51 [b1] = "Direccion"
0.52 [c1] = "Ciudad"
0.53 [d1] = "Region"
0.54 [e1] = "Sueldo Nominal"
0.55 'Sueldo nominal + Antiguedad - Aportes
0.56 [f1] = "Fecha de ingreso a la empresa"
0.57 [g1] = "Incentivo por antiguedad"
0.58 [h1] = "Aporte"
0.59 [i1] = "Sueldo liquido"
0.60
0.61
0.62 'Ingreso de los datos
0.63
0.64 Do
0.65
0.66
0.67     NomApe = InputBox("ingrese nombre y apellido", "NOMBRE Y APELLIDO")
0.68     Direccion = InputBox("ingrese direccion", "DIRECCION")
0.69     Ciudad = InputBox("ingrese ciudad", "CIUDAD")
0.70     SueNom = InputBox("ingrese sueldo nominal", "SUELDO NOMINAL")
0.71     FecIng = InputBox("Fecha de ingreso a la empresa", "FECHA DE INGRESO A LA EMPRESA")
0.72     
0.73     'Calculo de datos
0.74     Ant = (Date - FecIng) / 365
0.75     
0.76     '1. Si el empleado tiene más de 5 años de antiguedad se le pagará un incentivo de un 2% de su sueldo nominal
0.77     '2. Si el empleado tiene más de 7 años de antiguedad se le pagará un incentivo de un 4% de su sueldo nominal
0.78     '3. Si el empleado tiene más de 9 años de antiguedad se le pagará un incentivo de un 6% de su sueldo nominal
0.79     '4. Si el empleado tiene más de 10 años de antiguedad se le pagará un incentivo de un 8% de su sueldo nominal
0.80     '5. Si el empleado tiene menos de 5 años de antiguedad no se le pagara dicho incentivo.
0.81     
0.82     
0.83     Select Case Ant
0.84     Case Is > 10
0.85         Ince = SueNom * 0.08
0.86     Case Is > 9
0.87         Ince = SueNom * 0.06
0.88     Case Is > 7
0.89         Ince = SueNom * 0.04
0.90     Case Is > 5
0.91         Ince = SueNom * 0.02
0.92         'Para que entre aca tiene que tener por lo menos 6 años
0.93     Case Else
0.94     Ince = 0
0.95         'como hay un bucle si la vez anterior se cargo la variable ince con un valor case else = 0 la vuelve a 0, sino, cuando
0.96         'se ingresa un fecha con que le corresponda incentivo y despues se ingresa otra ficha
0.97         'que no le corresponde incentivo la variable ince no queda en 0
0.98                 
0.99     End Select
1.00     
1.01   
1.02     vtotal = Ince + SueNom
1.03     
1.04     '18% si gana menos de 3 SMN
1.05     '20% si gana menos de 6 SMN
1.06     '24% si gana menos de 10 SMN
1.07     '26% si gana menos de 12 SMN
1.08     
1.09         Select Case vtotal
1.10         Case Is < (SMN * 3)
1.11             vaportes = vtotal * 0.18
1.12         Case Is < (SMN * 6)
1.13             vaportes = vtotal * 0.2
1.14         Case Is < (SMN * 10)
1.15             vaportes = vtotal * 0.24
1.16         Case Is < (SMN * 12)
1.17             vaportes = vtotal * 0.26
1.18         Case Else
1.19             vaportes = vtotal * 0.26
1.20         End Select
1.21     
1.22      'volcado de datos
1.23     
1.24     ' vfilas = 2
1.25     
1.26     vfilas = Range("a10000").End(xlUp).Row + 1
1.27     
1.28     Range("a" & vfilas).Value = NomApe
1.29     Range("b" & vfilas).Value = Direccion
1.30     Range("c" & vfilas).Value = Ciudad
1.31     
1.32         If LCase(Ciudad) = "montevideo" Then
1.33             Range("d" & vfilas).Value = "Capital"
1.34             Else
1.35             Range("d" & vfilas).Value = "Interior"
1.36         End If
1.37     
1.38     Range("e" & vfilas).Value = SueNom
1.39     Range("f" & vfilas).Value = FecIng
1.40     Range("g" & vfilas).Value = Ince
1.41     Range("h" & vfilas).Value = vaportes
1.42     Range("i" & vfilas).Value = vtotal - vaportes
1.43     Columns("a:i").EntireColumn.AutoFit
1.44     Columns("E:I").ColumnWidth = 15
1.45     Range("e" & vfilas).NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
1.46     Range("g" & vfilas).NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
1.47     Range("h" & vfilas).NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
1.48     Range("i" & vfilas).NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
1.49    
1.50     continuar = MsgBox("¿desea agregar mas datos?", vbYesNo)
1.51     
1.52 Loop Until continuar = vbNo
1.53
1.54 End Sub

Evaluación del desempeño
No se ha evaluado.
Mejora
Versión original.

domingo, 13 de septiembre de 2015

Excel macros, proyecto 001

Articulo en borrador, el contenido se esta editando buscando mejorar el formato y la sintaxis, de todas formas no se esperan cambios que impliquen conceptos diferentes.
Contenido
Introducción.
Alcance.
Referencias.
Términos y definiciones.
Contexto de la organización
Soporte
Operación

Introducción

Introducir datos en una planilla de calculo, sin omisiones y con integridad de datos.

Alcance

Se hará una método de ingreso de datos que permite cierto intercambio de información, dando la posibilidad de establecer una comunicación con el digitador en el momento que tiene que ingresar los datos.
Se considera una forma de trabajo rápida el uso de números que representan los distintos cursos, con lo cual el empleo del teclado está restringido al sector de bloque numérico, también puede usarse los números en fila del teclado.

Referencias

PROGRAMAS EMPLEADOS
Nombre del programa Empleo
Microsoft Word Elaboración del texto
Microsoft Visio Elaboración de la ilustracion
Microsoft Excel Elaboración del proyecto que se describe

ESTRUCTURAS Y FUNCIONES EMPLEADAS EN EL CÓDIGO
Nombre Linea de código
Option Explicit0,01

Términos y definiciones

Macro, Secuencia de acciones dentro de la aplicación que el usuario activa pulsando una combinación específica de teclas o un botón dibujado en la planilla.
Integridad de datos, corrección y complementación de los datos en una base de datos. la formas de perderse pueden ser por añadir datos no válidos a la base de datos, tales como un pedido que hace referencia a un producto no existente.

Contexto de la organización

Academia, que brinda lo siguientes cursos.
Operador Windows $
5.000

Auxiliar Administrativo Contable  $
12.000
Excel Avanzado $
7.000
Diseño Gráfico $
6.500
La forma de pago puede ser contado o en cuotas a través de tarjeta de crédito. Si se abona contado se hace un 10 % de descuento.
Liderazgo
No aplica
Planificación
No aplica

Soporte

P.C., Sistema Windows, programa Microsoft Excel 2010

Operación

Cuando abra el archivo deberá aceptar la ejecución de macros, Excel realiza una advertencia ya que con la funcionalidad de los macros pueden hacerse virus, este código es de mi autoría y esta 100% libre de virus.
Se empleara un macro para generar la comunicación con el digitador, una serie de ventanas emergentes lo ira guiando en el proceso de ingreso de datos.

Ingreso de datos

Al presionar el botón, ingresar nuevo, se abre en primer plano una ventana que nos pide ingresar los siguientes datos
  1. nombre y el apellido
  2. curso
  3. forma de pago
  4. cantidad de cuotas (si corresponde)

Cálculo y/o validación de datos

  1. nombre y el apellido, no permite ingresar un campo en blanco.
  2. curso, permite ingresar solamente, los numero 1,2,3,4
  3. forma de pago, permite ingresar solamente los números 1,2
  4. cantidad de cuotas, (si corresponde, si la forma de pago es con tarjeta)

Consideraciones

Al finalizar los datos son volcados en la planilla debajo del último dato ingresado.

Código

0.01 Option Explicit
0.02
0.03 Sub Prueba()
0.04
0.05 'Variables
0.06
0.07 Dim vNomApe As String
0.08 Dim vCurso As Integer
0.09 Dim vForPag As Integer
0.10 Dim vCanCuo As Integer
0.11 Dim vNomCurso As String
0.12 Dim vPrecio As Long
0.13 Dim vPreCal As Long
0.14 Dim vForPagNom As String
0.15 Dim vFil As Integer
0.16 Dim vCon As Integer
0.17
0.18 'Formato de los titulos
0.19
0.20 Range("a1:h1").WrapText = True
0.21 Range("a1:h1").Font.Bold = True
0.22 Range("a1:h1").Font.Size = 12
0.23 Range("a1:h1").Interior.Color = RGB(225, 225, 225)
0.24 Range("a1:h1").RowHeight = 30
0.25 Range("a1:h1").HorizontalAlignment = xlGeneral
0.26 Range("a1:h1").VerticalAlignment = xlCenter
0.27 Range("A:H").ColumnWidth = 45
0.28
0.29 'esta ultima sentencia la agrego porque no me ajustaba las columanas en la sentencia
 Columns("a:i").EntireColumn.AutoFit, cuando
0.30 'el titulo quedaba en una columna mas chica y el texto del titulo en 2 lineas
0.31
0.32 'Titulos
0.33
0.34 [A1] = "Nombre y Apellido"
0.35 [b1] = "Curso"
0.36 [c1] = "Forma de pago"
0.37 [d1] = "Cantidad de cuotas"
0.38 [e1] = "Valor del curso"
0.39 [f1] = "Descuento"
0.40 [g1] = "Precio final"
0.41 [h1] = "Precio por cuota"
0.42
0.43 Do
0.44     Columns("a:h").EntireColumn.AutoFit
0.45     'Ingreso de los datos
0.46
0.47     Do
0.48     vNomApe = Application.InputBox("Ingrese nombre y apellido",
"NOMBRE Y APELLIDO", Type:=2)
0.49     Loop Until vNomApe <> ""
0.50
0.51     Do
0.52     vCurso = Application.InputBox("Ingrese curso," & Chr(13) & "1. Operador Windows"
& Chr(13) & "2. Auxiliar Administrativo Contable" & Chr(13) & "3. Excel Avanzado"
& Chr(13) & "4. Diseño Gráfico", "CURSO", Type:=1)
0.53     Loop Until (vCurso = 1) Or (vCurso = 2) Or (vCurso = 3) Or (vCurso = 4)
0.54
0.55     Do
0.56     vForPag = Application.InputBox("Ingrese la forma de pago" & Chr(13) & "1. Contado"
& Chr(13) & "2. Tarjeta de credito", "FORMA DE PAGO", Type:=1)
0.57     Loop Until (vForPag = 1) Or (vForPag = 2)
0.58
0.59     If vForPag = 2 Then
0.60
0.61     Do
0.62     vCanCuo = Application.InputBox("Ingrese la cantidad de cuotas",
 "CANTIDAD DE CUOTAS", Type:=1)
0.63     Loop Until IsNumeric(vCanCuo)
0.64
0.65     Else
0.66     vCanCuo = 1
0.67     'sino se pone esto despues da un error de division entre 0
0.68     End If
0.69
0.70     'Calculo
0.71
0.72     Select Case vCurso
0.73     Case Is = 1
0.74         vNomCurso = "Operador Windows"
0.75         vPrecio = 5000
0.76     Case Is = 2
0.77         vNomCurso = "Auxiliar Administrativo Contable"
0.78         vPrecio = 12000
0.79     Case Is = 3
0.80         vNomCurso = "Excel Avanzado"
0.81         vPrecio = 7000
0.82     Case Is = 4
0.83         vNomCurso = "Diseño Gráfico"
0.84         vPrecio = 6500
0.85     End Select
0.86
0.87     'Calculo del descuento
0.88    
0.89     If vForPag = 1 Then
0.90         vPreCal = vPrecio * 0.9
0.91         vForPagNom = "Contado"
0.92         Else
0.93         vPreCal = vPrecio
0.94         vForPagNom = "Tarjeta de credito"
0.95     End If
0.96
0.97
0.98     'Volcado
0.99     vFil = Range("a10000").End(xlUp).Row + 1
1.00     Range("a" & vFil).Value = vNomApe
1.01     Range("b" & vFil).Value = vNomCurso
1.02     Range("c" & vFil).Value = vForPagNom
1.03     Range("d" & vFil).Value = vCanCuo
1.04     Range("e" & vFil).Value = vPrecio
1.05     Range("e" & vFil).NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
1.06     Range("f" & vFil).Value = vPrecio - vPreCal
1.07     Range("f" & vFil).NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
1.08     Range("g" & vFil).Value = vPreCal
1.09     Range("g" & vFil).NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
1.10     Range("h" & vFil).Value = vPrecio / vCanCuo
1.11     Range("h" & vFil).NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)"
1.12     Columns("a:h").EntireColumn.AutoFit
1.13
1.14     Do
1.15     vCon = InputBox("¿Desea agregar un nuevo registro?" & Chr(13)
& "1. Ingresar un nuevo registro" & Chr(13) & "2. Dejar de ingresar nuevos registro",
"INGRESAR NUEVO REGISTRO")
1.16     Loop Until (vCon = 1) Or (vCon = 2)
1.17
1.18
1.19     Loop Until vCon = 2
1.20
1.21
1.22     'Queda la opcion de hacerlo con MsgBox
1.23     'vCon = MsgBox("¿desea agregar un nuevo registro?", vbYesNo)
1.24     'Loop Until Continuar = vbNo
1.25
1.26 End Sub

Ver diagrama de flujo en la siguiente página, Ilustración 1.



Ilustración 1
Evaluación del desempeño
No se ha evaluado.
Mejora
Versión original.