🎃 Grandes descuentos en libros en línea, eformaciones y vídeos*. Código CALABAZA30. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Aprenda el lenguaje VBA
  3. Gestión de los empleados
Extrait - Aprenda el lenguaje VBA y conviértase en un experto en Excel (versiones 2019, 2021 y Microsoft 365)
Extractos del libro
Aprenda el lenguaje VBA y conviértase en un experto en Excel (versiones 2019, 2021 y Microsoft 365) Volver a la página de compra del libro

Gestión de los empleados

Cálculo de duración y horario: descripción del ejemplo

Descripción general del ejemplo

El objetivo de este ejemplo es llevar a cabo la planificación del proyecto informático del portal de clientes de la empresa BolEni con los recursos humanos a su disposición. Se debe completar un conjunto de tareas para entregar el proyecto.

Recursos humanos

Cada recurso tiene un puesto: manager, diseñador, desarrollador o evaluador.

Cada recurso ha indicado su disponibilidad durante el período comprendido entre el 01/04/2022 y el 30/06/2022.

Tareas

Cada tarea se considera completada cuando se ha consumido el número de días por recurso. Comienzan cuando se han realizado las tareas anteriores y terminan cuando se han asignado los recursos necesarios.

Objetivo

El objetivo es determinar la fecha más temprana para terminar el proyecto en función de la disponibilidad de los recursos humanos. También se solicitará tener una representación gráfica de esta fecha de finalización.

Descripción general del archivo

El archivo Enunciado_5-ABC.xlsm consta de dos hojas: Planning y Tareas.

Hoja Planning

  • La hoja Planning contiene la lista de recursos humanos (columna A) que participan en el proyecto.

  • Cada recurso tiene su propia posición (columna B).

  • Cada recurso indica su disponibilidad para cada día marcando con una equis (X) la celda correspondiente...

Cálculo de la duración y del planning: conceptos del curso

Fórmulas de fecha

Las fórmulas de fecha permiten realizar operaciones con fechas: sumar/contar días, encontrar el final del mes...

Calcular el número de días laborables entre dos fechas

La función DIAS.LAB permite calcular el número de días laborables entre dos fechas.

La sintaxis es la siguiente:

=DIAS.LAB(fecha_inicial; fecha_final; [vacaciones]) 
  • Fecha_inicial: corresponde a la fecha de inicio de la serie.

  • Fecha_final: corresponde a la fecha de finalización de la serie.

  • Vacaciones: corresponde a un número de días festivos o a un rango que contiene días festivos. El argumento es opcional.

Ejemplo:

Cálculo del número de días laborables entre el 15 de diciembre de 2021 y el 31 de diciembre de 2021. El argumento es el día festivo del 25 de diciembre de 2021.

Resultado: el número de días laborables es 13.

images/VBA_265.png

Agregar un número de días laborables a una fecha

La función DIA.LAB devuelve un número que representa una fecha que corresponde a una fecha (fecha de inicio) a partir de la cual se suma o resta el número especificado de días laborables.

La sintaxis es la siguiente:

=DIA.LAB(fecha_inicial; días; [vacaciones]) 
  • Fecha_inicial: es la fecha base para el cálculo.

  • Días: el número de días que se van a agregar a la fecha base.

  • Vacaciones: corresponde a un número de días...

Cálculo de la duración y del planning: realización del ejemplo

 Abra el archivo Enunciado_5-ABC.xlsm.

Cálculo de la duración de cada tarea

Fecha de inicio y fecha de finalización

En la hoja Tareas, la duración de cada tarea se calculará en la columna H; en cualquier caso, ya es posible definir la estructura del diagrama de Gantt.

  • Columna G: la fecha de inicio mínima es la fecha de finalización de la tarea anterior + 1.

  • Columna I: La fecha de finalización es la fecha de inicio a la que se añade la duración.

images/VBA_274.png

Para la columna G, no hay una fórmula particular; debe tratar cada fila individualmente:

  • Para la fecha de inicio de las tareas 2 y 3, tome la fecha de finalización de la tarea 1 y agregue 1.

  • La fecha de inicio de la tarea 4 corresponde a la fecha de finalización de la tarea 3 más 1 día.

  • La fecha de inicio de las tareas 5 y 6 corresponde a la fecha de finalización de la tarea 4 más 1 día.

  • La fecha de inicio de la tarea 7 corresponde a la fecha de finalización más alejada entre las tareas 5 y 6.

  • Finalmente, la fecha de inicio de la tarea 8 corresponde a la fecha de finalización de la tarea 7 más 1 día.

 Introduzca las fórmulas siguientes:

images/VBA_275b.png

Para la fecha de finalización, agregue la duración a la fecha de inicio y use la fórmula DIA.LAB:

 Seleccione el rango I4:I11.

 Pulse la tecla F2 para editar la fórmula de la celda I4.

 Introduzca en la celda =DÍA.LAB(G4;H4;Festivos) y pulse las teclas CtrlIntro al mismo tiempo para aplicar la fórmula a todo el rango.

images/VBA_276.png

Calcular el tiempo necesario

En primer lugar, es necesario recuperar el número de recursos disponibles por negocio y por día. Con la fórmula CONTAR.SI.CONJUNTO podremos contar el número de recursos que han indicado su disponibilidad por puesto.

 En la hoja Planning, introduzca los diferentes elementos debajo de la tabla (rango B27:B30):

images/VBA_277.png

 Seleccione todo el rango C27:CO30.

 La fórmula va a ser un CONTAR.SI.CONJUNTO con dos criterios: que el elemento del recurso en B4:B26 sea igual al elemento en el rango B27:B30 y que la celda del rango sea igual a X: =CONTAR.SI.CONJUNTO($B$4:$B$26;$B27;C$4:C$26;"X")

 Pulse las teclas CtrlIntro simultáneamente para aplicar la fórmula a todo el rango.

images/VBA_278.png

Distribución de los recursos por tareas

Con objeto de contar el tiempo necesario para completar una tarea, debe crear un procedimiento que recorra cada una de las tareas del proyecto:

  • Que cuente el número de recursos necesarios por puesto.

  • Recorra todos los días desde la fecha de inicio de la tarea para determinar a partir de qué momento es posible completar la tarea.

  • Incluya la duración en la columna H de la hoja Tareas.

Cree el procedimiento:

 Abra VBA.

 Al principio de cada módulo, aquí Módulo1, verá la instrucción Option Explicit para no olvidar declarar una variable, y así controlarlas todas.

 En Módulo1, cree un procedimiento nuevo CalcularDuracion.

Sub CalcularDuracion 
End sub 

 El procedimiento se aplicará en ambas hojas, por lo que debe crear dos variables de objeto para cada una de ellas. Esto facilitará la navegación entre las hojas...

Gestión de asistencia. Herramienta de administración: presentación del ejemplo

Presentación del ejemplo

El objetivo de esta segunda parte es retomar el archivo de disponibilidad de los recursos humanos y añadir algunas funcionalidades para facilitar su uso.

Tal y como está, cualquier usuario del archivo puede cambiar la presencia/ausencia de todos los recursos humanos. El resto de este ejemplo le permitirá restringir, mediante una contraseña, la modificación de la disponibilidad.

El otro propósito de este ejemplo es calcular el coste de cada tarea y del total del proyecto. El coste de una tarea corresponde al coste de cada recurso requerido para una tarea. También se solicita optimizar el coste de cada tarea tomando el recurso menos costoso para ella.

Además, hay que tener en cuenta una limitación muy importante: el calendario no es fijo y puede extenderse mucho más allá de junio. El archivo debe tener la capacidad de adaptarse a esta posibilidad y generar tantos meses como sea necesario en el calendario.

Presentación del archivo

El archivo Enunciado_5-DEF.xlsm se basa en la primera parte de este capítulo; tiene la misma estructura, con las hojas Planning y Tareas. La hoja Planning contiene los datos de los recursos, mientras que la hoja Tareas contiene la planificación de cada tarea.

En comparación con el archivo Corrección_5-ABC.xlsm, el nuevo archivo de enunciado incorpora información adicional en la hoja Planning:

  • Identificador (columna B): se trata de un código único y secreto que identifica a los usuarios. Solo ellos conocen, cada uno, su código, que se utilizará para permitirles identificarse en la aplicación.

  • Coste (columna D): el coste corresponde a la cantidad diaria...

Gestión de asistencia. Herramienta de administración: conceptos del curso

Creación dinámica de controles

¿Qué es?

Agregar controles dinámicamente significa que se crean controles nuevos en el formulario en tiempo de ejecución.

La adición del control se desencadena mediante un procedimiento, ya sea automáticamente o por acción del usuario.

La adición de un control se realiza en un control contenedor, es decir, capaz de contener otros controles: Form, Frame, Page...

¿Cómo funciona?

Hay que crear un objeto de tipo Control y, a continuación, agregarlo a un control contenedor.

Dim MiControl As Control 'instanciación de una variable de tipo Control 

Para agregar el control a un control contenedor:

Set MiControl = 
Form.ControlContenedor.Controls.Add("forms.Textbox.1") 
'adición de un control Textbox nuevo al control contenedor. 

Para los otros controles, esta es la sintaxis que se debe usar:

Control

Sintaxis

ComboBox (cuadro de lista modificable)

Forms.ComboBox.1

CommandButton (botón de comando)

Forms.CommandButton.1

Frame (marco)

Forms.Frame.1

Imagen

Forms.Image.1

Label (etiqueta)

Forms.Label.1

ListBox (cuadro de lista)

Forms.ListBox.1

MultiPage

Forms.MultiPage.1

OptionButton (botón de opción)

Forms.OptionButton.1

ScrollBar (barra de desplazamiento)

Forms.ScrollBar.1

SpinButton (arriba)

Forms.SpinButton.1

TabStrip (tira de pestañas)

Forms.TabStrip.1

TextBox (cuadro de texto)

Forms.TextBox.1

ToggleButton (alternar)

Forms.ToggleButton.1

Una vez creado el control, es más fácil cambiar sus propiedades.

MiControl.Name = "NombreDelControl" 
MiControl.Left = 0 'Posicionamiento en el eje de las abscisas 
MiControl.Top...

Gestión de asistencia - Herramienta de administración: realización del ejemplo

 Abra el archivo Enunciado_5-DEF.xlsm.

Inicialización del formulario

El recurso que desee realizar un cambio en su disponibilidad abrirá el archivo y se colocará en la hoja Tareas. Luego hará clic en el botón Editar disponibilidad por persona para identificarse.

La identificación pasará por una ventana de tipo InputBox que le pedirá su identificador como paso previo para acceder al formulario.

Conexión para un recurso

Todo este código debe escribirse dentro del procedimiento MostrarFormularioPersona, porque cuando la persona hace clic en el botón se llama a este formulario. Este procedimiento está en el Módulo2.

 Al principio del Módulo2, escriba la instrucción Option Explicit.

images/VBA_294.png

Aquí puede ver las operaciones que hay que realizar:

 Primero, cree las variables:

  • Una variable de tipo cadena de caracteres para almacenar el identificador introducido por la persona.

  • Una variable de tipo número entero para recorrer las filas de la tabla que contienen los recursos humanos.

  • Una variable pública que contiene la fila del recurso encontrado. Esta debe definirse antes del procedimiento inicializarse en 0. La ventaja de tener una variable pública es conocer en todo momento, durante la ejecución, la fila donde se encuentra el recurso en la hoja Planning. Esto será especialmente útil al realizar copias de seguridad.

  • Más adelante, se crearán otras variables en el código.

 Escriba el código siguiente:

Option Explicit 
Public FilaRecurso As Integer 
Sub MostrarFormularioPersona() 
Dim Identificador As String 
Dim Fila As Integer 
FilaRecurso = 0 

 A continuación, cree un cuadro de diálogo de tipo InputBox asociado a la variable Identificador.

El cuadro de diálogo Inputbox se describe con el método Inputbox (encabezado, [título], [valor_por_defecto]...) y devuelve un valor de tipo String correspondiente al texto introducido por el usuario.

En este caso, solo utilizará los argumentos de encabezado (obligatorio) y título (opcional), y asignará el resultado del cuadro de diálogo Inputbox a la variable identificador:

Identificador = InputBox("Introduzca su identificador", "Identificador") 
images/VBA_299.png

No se lleva a cabo ningún control sobre la entrada, solo va a recorrer la lista de identificadores para verificar si encuentra el introducido.

Para ello, creará un bucle de tipo While... Wend que recorre la tabla de la columna B de la hoja Planning a partir de la fila 4 hasta que encuentre una columna vacía. Como se ha visto anteriormente, la variable Fila se incrementará con cada iteración del bucle.

Si se encuentra una coincidencia, es decir, si el valor de la celda de la columna B y el número de fila contenido en la variable Fila corresponde al identificador introducido en el cuadro de diálogo InputBox, la variable FilaRecurso toma el valor de la fila. Si el valor de la variable FilaRecurso es distinto de 0, también se considera una condición de salida del bucle While... Wend.

 Introduzca el siguiente código:

Fila = 4 
'la primera fila recorrida es la 4 
Sheets("Planning").Activate...