La siguiente macro está diseñada en conjunto al archivo Excel con el objetivo de servir de nexo para el trabajo colaborativo en equipos de trabajo, especialmente aquellos que se encuentran en oficinas y/o comparten una red local que les permite trabajar conectados.
Usos posibles de la macro
1. Cuadro de control y monitoreo para delegación de tareas: Se pueden ingresar tareas y Deadlines de forma unificada que aparecen en monitores individuales para los distintos usuarios con acceso a la planilla. Estos pueden actualizar el progreso de las tareas delegadas y el administrador puede hacer seguimiento de estas.
2. GANTT Colaborativo: Se puede realizar una planificación centralizada, la cual puede ser compartida y delegada inmediatamente, así como también es posible su posterior seguimiento.
3. Planificador de actividades: Se pueden compartir eventos con otros usuarios, con distintos niveles de acceso.
Potencial de la macro
El código de la macro lo programé para que fuese ampliable a múltiples usuarios, pudiendo incluso tener una base independiente de procesos y usuarios posibles para una mayor capacidad.
Al estar programada en Vba de Excel, su uso puede ser asimilado fácilmente por usuarios nuevos, dado que es una herramienta de uso común.
Requerimientos de la macro y supuestos
La macro requiere de una planilla en la que existan un mínimo de 3 hojas, un Planificador, un Usuario y una base de actualizaciones. Los supuestos son:
1. La macro programada contiene a 2 usuarios, los cuales son autentificados con los RUT 17467733 y 10000000, de los cuales el primero corresponde a un usuario planificador (Administrador) y el segundo a un usuario normal, que en este caso será un simil del usuario invitado para efectos de revisión. Además, la macro se diseño con los siguientes supuestos:
2. Contiene un máximo de 5 tareas/eventos delegables, esto dado que el código se encuentra comprimido en una sola macro en su mayoría, sin embargo, es fácilmente extendible armando una base de procesos (una hoja que aloje todos los procesos, los usuarios y sus deadlines.
3. Contiene 2 usuarios, también se comprimió el numero de usuarios para efectos de almacenarlos en una sola macro, aunque al igual que el punto anterior, es fácilmente extendible armando un listado de usuarios en una hoja independiente que alimente el código.
4. Para actualizar los estados posibles así como las observaciones de las tareas/eventos delegados, se implementa un formulario básico cuyo código VBA se encuentra en el apartado 2.
5. Con objeto de mantener la privacidad de los monitores individuales y como precaución ante borrado de datos o mal uso, es que las planillas quedan ocultas con el codigo "= xlVeryHidden". Con esto se asegura que los individuos solo accedan a los monitores autorizados.
Descripción de la macro:
La macro se encarga principalmente de mostrar cuales son las tareas o eventos en los que el usuario participa o que se le hayan delegado, permitiendole actualizar el estado de avance, colocar observaciones y verificar el tiempo restante para cumplir los plazos (deadlines) registrados.
Las pantallas del archivo en los que actúa la Macro son las siguientes:
1. Vista HOME, Botón activa la macro.
2. La macro inicia con un cuadro de autentificación de usuario.
3. Monitor de Planificador, el administrador del documento.
En la Hoja "Planificador", el usuario puede editar los campos "Usuario" (a quien delega), "Evento" (Actividad que se delega), "Descripción" (referente al Evento), "Estado" (cual es el estatus del evento, así como una observación del usuario mostrada como comentario de la celda) y los "Días Deadline 1, 2 y 3", los cuales son campos de fecha que indican periodicidad. A continuación vemos un ejemplo:
"El evento viajar "donde sea" se encuentra frustrado por verano y como comentario aparece "eso pasa por tomar cursos de verano". Además, este evento debe realizarse 3 veces al año siendo las fechas limite el 05 de marzo, 05 de agosto y 5 de diciembre."
4. Monitor de Usuario, muestra las tareas/eventos delegados a ese usuario.
5. Formulario de actualización de estados y observaciones de los eventos.
Las observaciones aparecen como comentarios en las celdas de los estados.
El código de la macro es el siguiente:
'Inicio Código VBA - Apartado 1 (Macro Principal)
Sub INGRESO()
Dim Pagina As String
Dim RUT As String
Dim contador As Integer
Dim codigo As String
Dim Comment As String
'Entrar a modulo individual
RUT = InputBox("Introduzca su RUT (sin digito verificador, puntos ni guión): ", "Ingreso a Módulo Individual")
If RUT = "17467733" Then
Sheets("Planificador").Visible = True
Sheets("Planificador").Select
Range("C2").Select
'Macro Genérica que actualiza los estados de los eventos delegados
contador = 5
Sheets("Base_Actualizaciones").Visible = True
'Cantidad maxima de eventos por persona = 20
Do While contador < 20
Range("F" & contador).Select
Selection.ClearComments
'la búsqueda se realiza por el código del evento asignado en la hoja "Planificador"
'se usa "Pagina" para que sea extendible a muchos usuarios
Pagina = Application.ActiveSheet.Name
codigo = Sheets(Pagina).Range("C" & contador)
If codigo <> "" Then
Sheets("Base_Actualizaciones").Select
ActiveSheet.Range("$C$3:$G$20000").AutoFilter Field:=1, Criteria1:= _
codigo
Range("F3").Select
Selection.End(xlDown).Select
Selection.Copy
Sheets(Pagina).Select
Range("F" & contador).Select
ActiveSheet.Paste
' almacena observacion y crea el comentario
Sheets("Base_Actualizaciones").Select
Range("G3").Select
Selection.End(xlDown).Select
Comment = ActiveCell.Value
Sheets(Pagina).Select
Range("F" & contador).AddComment
Range("F" & contador).Comment.Visible = False
Range("F" & contador).Comment.Text Text:="CompNeg:" & Chr(10) & Comment
Sheets("Base_Actualizaciones").Range("$C$3:$G$20000").AutoFilter Field:=1
contador = contador + 1
Else
Exit Do
End If
Loop
Sheets("Base_Actualizaciones").Visible = xlVeryHidden
Else
'Demo de la macro solo para 2 usuarios, ambos registrados y no permite invitados
'Busca RUT dado que al sumar usuarios, los monitores se buscan por este atributo
Sheets(RUT).Visible = True
Sheets(RUT).Select
Range("C2").Select
'Dado que pueden haber multiples monitores, se aplica a la hoja en uso
Pagina = Application.ActiveSheet.Name
'Borra contenido
Range("D14:F14").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
'Actualiza los eventos asignados
Sheets("Planificador").Visible = True
Sheets("Planificador").Select
Range("C2").Select
ActiveSheet.Range("$B$4:$M$11").AutoFilter Field:=1, Criteria1:= _
RUT
Range("C5:E5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets(RUT).Select
Range("D6").Select
ActiveSheet.Paste
Range("D7").Select
'Actualiza los días restantes para el siguiente Deadline programado
Sheets("Planificador").Select
Range("M5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets(RUT).Select
Range("H6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("D7").Select
'Quita filtro y oculta
Sheets("Planificador").Select
ActiveSheet.Range("$B$4:$M$11").AutoFilter Field:=1
Range("B13").Select
Sheets("Planificador").Visible = xlVeryHidden
Sheets(Pagina).Select
'Macro Genérica para la actualización de todos los estados.
contador = 6
Sheets("Base_Actualizaciones").Visible = True
'Cantidad maxima de eventos por persona = 20
Do While contador < 20
Range("G" & contador).Select
Selection.ClearComments
'la busqueda se realiza por el código del evento asignado en la hoja "Planificador"
codigo = Sheets(Pagina).Range("D" & contador)
If codigo <> "" Then
Sheets("Base_Actualizaciones").Select
ActiveSheet.Range("$C$3:$G$20000").AutoFilter Field:=1, Criteria1:= _
codigo
Range("F3").Select
Selection.End(xlDown).Select
Selection.Copy
Sheets(Pagina).Select
Range("G" & contador).Select
ActiveSheet.Paste
' almacena observación y crea el comentario
Sheets("Base_Actualizaciones").Select
Range("G3").Select
Selection.End(xlDown).Select
Comment = ActiveCell.Value
Sheets(Pagina).Select
Range("G" & contador).AddComment
Range("G" & contador).Comment.Visible = False
Range("G" & contador).Comment.Text Text:="CompNeg:" & Chr(10) & Comment
Sheets("Base_Actualizaciones").Range("$C$3:$G$20000").AutoFilter Field:=1
contador = contador + 1
Else
Exit Do
End If
Loop
Sheets("Base_Actualizaciones").Visible = xlVeryHidden
End If
End Sub
'Término de Código VBA
'Inicio Código VBA - Apartado 2 (Formulario)
Private Sub ComboBox1_Change()
ComboBox1.AddItem ("FRUSTRADO POR VERANO")
ComboBox1.AddItem ("DELEGADO")
ComboBox1.AddItem ("FRUSTRADO POR ESTUDIO")
End Sub
Private Sub ComboBox3_Change()
Dim evento As String
Dim contador As Integer
evento = ComboBox3.Value
contador = 5
Do While True
If Range("Planificador!C" & (contador)) = evento Then
Exit Do
Else
contador = contador + 1
End If
Loop
Label8.Caption = Range("Planificador!D" & Trim(Str(contador)))
Label9.Caption = Range("Planificador!E" & Trim(Str(contador)))
End Sub
Private Sub UserForm_Initialize()
ComboBox2.AddItem ("17467733")
ComboBox2.AddItem ("10000000")
Label8.Caption = "Esperando código"
Label9.Caption = "Esperando código"
Dim Counter As Integer
Counter = 1
While Counter < 6
ComboBox3.AddItem (Counter)
Counter = Counter + 1
Wend
End Sub
Private Sub CommandButton1_Click()
Dim User As String
Dim codigo As Integer
Dim Estado As String
Dim OBS As String
Dim ultimafila As Double
codigo = ComboBox3.Value
Estado = ComboBox1.Value
OBS = txtObservacion.Value
Usuario = ComboBox2.Value
Sheets("Base_Actualizaciones").Visible = True
Sheets("Base_Actualizaciones").Select
ultimafila = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
Cells(ultimafila + 1, 2) = Usuario
Cells(ultimafila + 1, 3) = codigo
Cells(ultimafila + 1, 6) = Estado
Cells(ultimafila + 1, 7) = OBS
txtObservacion = ""
ComboBox1 = ""
ComboBox3 = ""
ComboBox2 = ""
Label8.Caption = "Ingrese un código válido."
Sheets("Base_Actualizaciones").Visible = False
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
'Término de Código VBA
ENLACES
A Continuación se presenta el archivo utilizado. La planilla contiene el código y el Formulario.
Descargar Fichero EXCEL
Descargar Fichero EXCEL
No hay comentarios:
Publicar un comentario