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.

No hay comentarios:

Publicar un comentario