Problema con programa para fichar
Publicado por Manuel (26 intervenciones) el 10/05/2020 12:08:04
Buenos Dias a ver si alguien puede resolverme el problema, ya que estoy adecuando un programa de fichado de trabajadores a mis necesidades, y no consigo hacer que fiche varias entradas y salidas en el mismo dia un mismo trabajador, tiene receso para comer, pero yo lo que necesito es que fichen varias veces al dia ya que el horario es muy flexible, os pego el código del formulario de marcaje a ver si me podeis dar una solución, ya que lo he intentado de varias maneras y no lo consigo, es el mismo código donde he insertado el redondeo de las horas a cuartos que me proporcionasteis, el cual funciona de maravilla:
Muchisimas gracias.
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
Option Explicit
Const Tempus = 1.5 'Segundos
Sub TEMPORAL()
CreateObject("wscript.shell").Popup _
"MARCAJE INCORRECTO! " & vbCr & vbCritical & _
"LA LECTURA FUE INCORRECTA... INTENTE DE NUEVO !", 1, "MARCAJE INCORRECTO!", vbCritical
End Sub
Sub MsgBox_con_Temporizador()
Dim objShell As Object
Dim respuesta1 As Integer, respuesta2 As Integer, respuesta3 As Integer
Set objShell = CreateObject("WScript.Shell")
'Sint?xis M?todo PopUp: .Popup(Texto,[Tiempo en segundos],[Titulo MsgBox],[Tipo Bot?n])
respuesta2 = objShell.Popup("LA LECTURA FUE INCORRECTA... INTENTE DE NUEVO!", Tempus, "MARCAJE INCORRECTO!", vbCritical)
Set objShell = Nothing
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub Bcerrar_Click()
Unload Me: Principal.Show
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub BReceso_Click()
Sheets("Recesos").Activate
Dim Recode As Integer
Recode = Rece(Cbreceso.Text)
If Recode = 0 Then '1'-------------------------------------------------------------------------------------3
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate ' si el registro no existe, se va al final.
Loop
With ActiveCell.EntireRow.Font '--------------*
.Name = "Arial"
.Size = 8
End With '------------------------------------*
'Aqui es cuando agregamos o modificamos el registro
Application.ScreenUpdating = False
ActiveCell = Tcod2
ActiveCell.Offset(0, 1) = Tnom: ActiveCell.Offset(0, 2) = Tape:
ActiveCell.Offset(0, 3) = Lhora: ActiveCell.Offset(0, 5) = Tfecha
' ActiveCell.Offset(0, 5) = Tfecha: ActiveCell.Offset(0, 7) = Tcod2
ActiveCell.Offset(0, 6) = Tcodigo2: ActiveCell.Offset(0, 7) = Tpla
ActiveCell.Offset(0, 8) = Lti: ActiveCell.Offset(0, 9) = tcp
Application.ScreenUpdating = True
'CommandButton1_Click
ActiveWorkbook.Save: 'Unload Me: Marcaje.Show:
Else
Cells(Recode, 2).Select
'Aqui es cuando agregamos o modificamos el registro
Btiempo_Click
Application.ScreenUpdating = False
ActiveCell = Tcod2
ActiveCell.Offset(0, 0) = Tnom: ActiveCell.Offset(0, 3) = Lhora
ActiveCell.Offset(0, 4) = Tfecha: ActiveCell.Offset(0, 5) = Tcodigo2
ActiveCell.Offset(0, 6) = Tpla: ActiveCell.Offset(0, 7) = Rti
ActiveCell.Offset(0, 8) = tcp
Application.ScreenUpdating = True
'CommandButton1_Click
ActiveWorkbook.Save: 'Unload Me: Marcaje.Show:
End If '---------------------------------------------------------------------------------------------------3
'End If '---------------------------------------------------------------------------------------------------2
End Sub
Private Sub Btiempo_Click()
R2 = Lhora
Dim A0, A1 As Variant
A0 = Format(R1, "hh:mm:ss")
A1 = Format(R2, "hh:mm:ss")
If R1 = "" Then
Exit Sub
Else
Rti = Format(TimeValue(A1) - TimeValue(A0), "hh:mm:ss")
End If
End Sub
Private Sub Cbcode_Change()
Tcod.Text = Cbcode.Text
Tcodigo2 = Tcod + Tfecha + Tpla
On Error Resume Next
If nCode(Cbcode.Text) <> 0 Then
Sheets("Empleados").Activate
Cells(Cbcode.ListIndex + 2, 1).Select
Tnom = ActiveCell.Offset(0, 1): Tape = ActiveCell.Offset(0, 2):
Ten = ActiveCell.Offset(0, 13): Tsa = ActiveCell.Offset(0, 14):
Truta3 = ActiveCell.Offset(0, 15)
Else
Tnom = "": Tape = "": Truta3 = "": Ten = "": Tsa = ""
End If
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub Cbcode2_Change()
On Error Resume Next
If nCode2(Cbcode2.Text) <> 0 Then
Sheets("Control").Activate
Cells(Cbcode2.ListIndex + 2, 1).Select
Tnom = ActiveCell.Offset(0, 1): Tape = ActiveCell.Offset(0, 2):
Tcod3 = ActiveCell.Offset(0, 8):
Else
Tnom = "": Tape = "": Tcod3 = ""
End If
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub Cbcode3_Change()
On Error Resume Next
If nCode3(Cbcode3.Text) <> 0 Then
Sheets("Marcajes").Activate
Cells(Cbcode3.ListIndex + 2, 1).Select
The = ActiveCell.Offset(0, 2):
Else
The = ""
End If
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub Cbreceso_Change()
On Error Resume Next
If Reces(Cbreceso.Text) <> 0 Then
Sheets("recesos").Activate
Cells(Cbreceso.ListIndex + 2, 1).Select
R1 = ActiveCell.Offset(0, 3): ' Tcodigo2 = ActiveCell.Offset(0, 9)
Else
R1 = ""
End If
End Sub
Private Sub CommandButton1_Click()
If Tnom = "" Then
Exit Sub
End If
Dim P0, P1 As Variant
P1 = Format(Ten, "hh:mm:ss")
P0 = Format(Lhora, "hh:mm:ss")
If The = "" And TimeValue(P0) > TimeValue(P1) Then
Ttar = Format(TimeValue(P1) - TimeValue(P0), "hh:mm:ss")
Ttarde = "Tarde" + Tpla
End If
Sheets("Marcajes").Activate
Dim fCode3 As Integer
fCode3 = nCode3(Tcod2.Text)
If fCode3 = 0 Then
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate ' si el registro no existe, se va al final.
Loop
With ActiveCell.EntireRow.Font '--------------*
.Name = "Calibri"
.Size = 9
End With '------------------------------------*
'Aqui es cuando agregamos o modificamos el registro
Application.ScreenUpdating = False
ActiveCell = Tcod2
'ActiveCell.Offset(0, 0) = Tcod
ActiveCell.Offset(0, 1) = Tnomc: ActiveCell.Offset(0, 2) = Lhora: ' ActiveCell.Offset(5, 3) = Thos
ActiveCell.Offset(0, 4) = Tfecha:
ActiveCell.Offset(0, 5) = Tcod: ActiveCell.Offset(0, 6) = Tpla
ActiveCell.Offset(0, 7) = Lti: ActiveCell.Offset(0, 8) = tcp
ActiveCell.Offset(0, 9) = Ttar: 'ActiveCell.Offset(0, 10) = Tex
ActiveCell.Offset(0, 11) = Ttarde
Application.ScreenUpdating = True
ActiveWorkbook.Save: 'Unload Me: Marcaje.Show:
Else
'If fCode3 <> 0 Then
Dim D0, D1 As Variant
D1 = Format(Tsa, "hh:mm:ss")
D0 = Format(Lhora, "hh:mm:ss")
If Thsa = "" And TimeValue(D0) > TimeValue(D1) Then
Tex = Format(TimeValue(D1) - TimeValue(D0), "hh:mm:ss")
Textra = "Extra" + Tpla
End If
Thsa = Lhora: R2 = Lhora
CommandButton2_Click
Cells(fCode3, 1).Select
'Aqui es cuando agregamos o modificamos el registro
Application.ScreenUpdating = False
ActiveCell = Tcod2
ActiveCell.Offset(0, 3) = Lhora: ActiveCell.Offset(0, 4) = Tfecha
ActiveCell.Offset(0, 6) = Tpla: ActiveCell.Offset(0, 7) = Tti
ActiveCell.Offset(0, 8) = tcp
'ActiveCell.Offset(0, 9) = Ttar:'ActiveCell.Offset(0, 11) = Ttarde:
ActiveCell.Offset(0, 10) = Tex: ActiveCell.Offset(0, 12) = Textra
Application.ScreenUpdating = True
ActiveWorkbook.Save: ' Unload Me: Marcaje.Show:
End If
Ttarde = "": Textra = ""
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub CommandButton2_Click()
Dim t0, t1 As Variant
t0 = Format(The, "hh:mm:ss")
t1 = Format(Thsa, "hh:mm:ss")
If The = "" Then
Exit Sub
Else
Tti = Format(TimeValue(t1) - TimeValue(t0), "hh:mm:ss")
End If
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub Receso1_Click()
End Sub
Private Sub Receso2_Click()
End Sub
Private Sub Tcod_Change()
If IsNumeric(Tcod.Text) Then
Else
Tcod = ""
End If
Tcod2 = Tcod + Tfecha + Tpla: Cbcode2 = Tcod.Text: Cbreceso = Tcod + Tfecha + Tpla
Cbcode.Text = Tcod.Text
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub Tcod_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then '------------------------------------------------------------------------------------ 1
tcp = Tcod + Tpla
Cbreceso = Tcod + Tfecha + Tpla
'***********************
If Tnom = "" Then '---------------*
'TEMPORAL
MsgBox_con_Temporizador
Unload Me: Marcaje.Show
Exit Sub
End If '--------------------------*
Dim Hor As Byte, Min As Byte
Hor = Val(Mid(Format(Time, "hh:mm"), 1, 2))
Min = Val(Mid(Format(Time, "hh:mm"), 4, 2))
Select Case Min
Case Is < 7: Min = 0
Case Is < 22: Min = 15
Case Is < 37: Min = 30
Case Is < 52: Min = 45
Case Is < 59: Min = 0: Hor = Hor + 1
End Select
Lhora.Caption = TimeValue(Hor & ":" & Min & ":00")
Dim Rece0, Rece1, Hora1 As Variant
Rece0 = Format(Receso1, "hh:mm:ss")
Rece1 = Format(Receso2, "hh:mm:ss")
Hora1 = Format(Lhora, "hh:mm:ss")
'rece0 = 12:55:00, Rece1 = 14:05:00
'MsgBox Rece0 & Rece1 & Hora1
If TimeValue(Hora1) >= TimeValue(Rece0) And TimeValue(Hora1) <= TimeValue(Rece1) Then '--------------------------------------------------------------2
BReceso_Click
End If '---------------------------------------------------------------------------------------------------2
Sheets("Control").Activate
Dim fCode2 As Integer
fCode2 = nCode2(Tcodigo2.Text)
If fCode2 = 0 Then '1'-------------------------------------------------------------------------------------3
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate ' si el registro no existe, se va al final.
Loop
With ActiveCell.EntireRow.Font '--------------*
.Name = "Arial"
.Size = 8
End With '------------------------------------*
'Aqui es cuando agregamos o modificamos el registro
Application.ScreenUpdating = False
ActiveCell = Tcodigo2
ActiveCell.Offset(0, 1) = Tnom: ActiveCell.Offset(0, 2) = Tape:
ActiveCell.Offset(0, 3) = Lhora: ActiveCell.Offset(0, 5) = Tfecha
' ActiveCell.Offset(0, 5) = Tfecha: ActiveCell.Offset(0, 7) = Tcod2
ActiveCell.Offset(0, 6) = Tcod2: ActiveCell.Offset(0, 7) = Tpla
Application.ScreenUpdating = True
CommandButton1_Click
ActiveWorkbook.Save: Unload Me: Marcaje.Show:
Else
Cells(fCode2, 2).Select
'Aqui es cuando agregamos o modificamos el registro
Application.ScreenUpdating = False
ActiveCell = Tcodigo2
ActiveCell.Offset(0, 0) = Tnom: ActiveCell.Offset(0, 3) = Lhora
ActiveCell.Offset(0, 4) = Tfecha: ActiveCell.Offset(0, 5) = Tcod2
ActiveCell.Offset(0, 6) = Tpla
Application.ScreenUpdating = True
CommandButton1_Click
ActiveWorkbook.Save: Unload Me: Marcaje.Show:
End If '---------------------------------------------------------------------------------------------------3
End If '---------------------------------------------------------------------------------------------------1
'**************************************************************************************************************************************************************
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub Tcod2_Change()
Cbcode3 = Tcod2
End Sub
Private Sub Tfecha_Change()
Tcodigo2 = Tcod + Tfecha + Tpla
End Sub
Private Sub Tnom_Change()
Tnomc = Tnom + " " + Tape
If Tnom <> "" Then
Lhora.Visible = True
Else
Lhora.Visible = False
End If
End Sub
Private Sub Tape_Change()
Tnomc = Tnom + " " + Tape
If Tape <> "" Then
Lhora.Visible = True
Else
Lhora.Visible = False
End If
End Sub
Private Sub Tnomc_Change()
End Sub
Private Sub Tpla_Change()
Tcodigo2 = Tcod + Tfecha + Tpla
End Sub
Private Sub Truta3_Change()
If Truta3 <> "" Then
Image1.Picture = LoadPicture(Truta3)
Else
Image1.Picture = LoadPicture(Truta2)
End If
End Sub
Private Sub UserForm_Activate()
Dim Hor As Byte, Min As Byte
Hor = Val(Mid(Format(Time, "hh:mm"), 1, 2))
Min = Val(Mid(Format(Time, "hh:mm"), 4, 2))
Select Case Min
Case Is < 7: Min = 0
Case Is < 22: Min = 15
Case Is < 37: Min = 30
Case Is < 52: Min = 45
Case Is < 59: Min = 0: Hor = Hor + 1
End Select
Lhora = TimeValue(Hor & ":" & Min & ":00")
Tpla = weeknum(Tfecha):
Tcod2 = Tcod + Tfecha + Tpla
Lti.Caption = "0:00:00"
End Sub
'---------------------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
Dim rango, celda As Range
Set rango = Worksheets("Empleados").Range("Listado_emp")
For Each celda In rango
Cbcode.AddItem celda.Value
Next celda
Cbcode.Text = Worksheets("Empleados").Range("A2")
Dim rango1, celda1 As Range
Set rango1 = Worksheets("Control").Range("Listado_mar")
For Each celda1 In rango1
Cbcode2.AddItem celda1.Value
Next celda1
'Cbcode2.Text = Worksheets("Control").Range("A2")
'**************************************************************************************
Dim rango2, celda2 As Range
Set rango2 = Worksheets("Marcajes").Range("Listado_cod")
For Each celda2 In rango2
Cbcode3.AddItem celda2.Value
Next celda2
'Cbcode3.Text = Worksheets("Marcajes").Range("A2")
'*************************************************************************************
Dim rangoA, celdaA As Range
Set rangoA = Worksheets("recesos").Range("Listado_rec")
For Each celdaA In rangoA
Cbreceso.AddItem celdaA.Value
Next celdaA
'*************************************************************************************
Tfecha = Date
Cbcode2.Text = Cbcode.Text
Tcod = ""
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim qq As String
If CloseMode = 0 Then
qq = Chr(34): Cancel = 1
End If
End Sub
Muchisimas gracias.
Valora esta pregunta


0