-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMódulo1.bas
106 lines (78 loc) · 3.59 KB
/
Módulo1.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Attribute VB_Name = "Módulo1"
' Celda que almacena el tiempo incurrido (cronómetro).
Public timerRange As String
' Celda que almacena la tarea a incurrir.
Public incurredTaskRange As String
' Celda que almacena el número de la semana actual del año.
Public weekNumRange As String
' Celda que almacena la jornada laboral del usuario.
Public dailyShiftRange As String
' Rango de celdas que almacenan los tiempos incurridos durante la semana.
Public lastIncurredRange As String
' Tarea que se está incurriendo.
Public incurredTask As String
' Cronómetro encendido.
Public timerOn As Boolean
' Establece la actualización del cronómetro.
Public Sub SetTimer()
Application.OnTime Now + TimeValue("00:00:01"), "MoveTimer"
End Sub
' Actualiza la celda del cronómetro y el texto de la barra de estado,
' además de volver a llamar a la función "SetTimer()", generando un bucle.
Public Sub MoveTimer()
If (timerOn = True) Then
Worksheets(1).range(timerRange).Value = Worksheets(1).range(timerRange).Value + TimeValue("00:00:01")
Application.StatusBar = incurredTask + ": " + Format(range(timerRange).Value, "hh:mm:ss")
Call SetTimer
End If
End Sub
' Restablece el cronómetro y, si corresponde, la barra de estado.
Public Sub ResetTimer()
If (timerOn = False) Then
Worksheets(1).range(timerRange).Value = TimeValue("00:00:00")
Application.StatusBar = "No estas realizando ninguna tarea."
Else
Worksheets(1).range(timerRange).Value = TimeValue("00:00:01")
End If
End Sub
' Suma el tiempo incurrido a la celda correspondiente a la tarea y al día de la semana.
' Devuelve el rango de la celda mencionada.
Public Function SetCell() As String
Dim row As Integer
Dim column As Integer
Dim incurredTime As Double
For row = 9 To 50
If (Cells(row, 2).Value = incurredTask Or Cells(row, 2).Value = "") Then
Exit For
End If
Next
column = Weekday(Date, 2) + 2
incurredTime = Worksheets(1).range(timerRange).Value * 24
Cells(row, column).Value = Cells(row, column).Value + incurredTime
SetCell = Cells(row, column).Address
End Function
' Redondea el tiempo incurrido de la última tarea si faltan 15 o menos minutos para completar la jornada laboral.
' lastIncurredRange: Rango de la celda a redondear.
Public Sub RoundResult(lastIncurredRange As String)
Dim dailyShift As Double
Dim todaysTotalIncurredTime As Double
dailyShift = Worksheets(1).range(dailyShiftRange).Value
todaysTotalIncurredTime = Cells(7, range(lastIncurredRange).column).Value
If (todaysTotalIncurredTime < dailyShift And todaysTotalIncurredTime >= (dailyShift - 0.25)) Then
range(lastIncurredRange).Value = range(lastIncurredRange).Value + (dailyShift - todaysTotalIncurredTime)
End If
End Sub
' Lanza un mensaje de aviso si no se está incurriendo ninguna tarea.
Public Sub Reminder()
If (incurredTask = "") Then
MsgBox "No estas incurriendo ninguna tarea.", vbExclamation, "Sistema de incurridos"
End If
End Sub
' Pregunta la jornada laboral del usuario para hacer uso de la función "RoundResult()".
Public Sub AskDailyShift()
Worksheets(1).range(dailyShiftRange).Value = Application.InputBox("Por favor, introduce tu jornada laboral en horas." + _
vbCrLf + "Por ejemplo: 7,5", "Sistema de incurridos", Type:=1)
If (Worksheets(1).range(dailyShiftRange).Value = FALSO) Then
Worksheets(1).range(dailyShiftRange).Value = 0
End If
End Sub