Calculo de horas por medio de una macro

Tengo problemas con el calculo de la las horas de atrasos de los empleados de una empresa, los que se registran diariamente en una planilla. He creado una macro que permite realizar el calculo pero me presenta problemas al calcular el total de atrasos, ya que me entrega como resultado valores mayores al real.

El código que estoy utilizando es:

Sub guardar(codigo, fecha, hora As String)
Dim fechados, he, hi As String
he = #8:00:00 AM#
au = #6:30:00 AM#
Dim cuenta, resta, cuenta2, total As Date

ufila = Range("B" & Rows.Count).End(xlUp).Row
Rango = "B2:B" & Ulfila
Range("B2").Select
For i = 2 To ufila
If Range("b" & i) = codigo Then
Range("XFD1").Select
ucolumna = Cells(2, Columns.Count).End(xlToLeft).Column
Range("B" & i).Select
For X = 3 To ucolumna
fechados = CStr(Cells(2, X).Value)
If fechados = fecha Then
Cells(i, X).Value = hora
End If
Next X
cuenta = 0
resta = 0
cuenta2 = 0
total = 0
For X = 6 To ucolumna
If Cells(i, X).Value = "Ausente" Then
cuenta = cuenta + au
Else
If Cells(i, X).Value > he Then
resta = Cells(i, X).Value - he
cuenta2 = cuenta2 + resta
End If
End If
Next X
If Cells(2, ucolumna).Value <> "Horas de ausencia" Then
Cells(2, ucolumna + 1).Value = "Horas de ausencia"
End If
ucolumna = Cells(2, Columns.Count).End(xlToLeft).Column
total = cuenta + cuenta2
Cells(i, ucolumna).Select
Cells(i, ucolumna).Value = total
Selection.NumberFormat = "[h]:mm:ss"
End If
Next i
End Sub

Esta macro me entrega como resultado lo siguiente:

1 respuesta

Respuesta

¿Cuál es el resultado que esperas obtener? Creo que lo que quieres es sumar cantidad de horas, y recibir en el resultado pues eso, una cantidad de horas, no un horario. ¿Correcto?

¿Por qué usas VBA? Puedes sumar horas con la formula =SUM()

Pero claro, seguro lo probaste y tampoco te dio el resultado que esperas, y la respuesta puede estar en el formato de la celda.

Dime, ¿a mi me dio correcto?:

Si eso es lo que quieres lograr, tienes que cambiar el formato de la celda a [h]:mm

Esos corchetes son la clave:

PD: Tus variables están mal declaradas en el código.

Andy M.

Usaste sintaxis de VB, no de VBA. Aunque se parecen, son lenguajes diferentes.

Si bien en VB es correcto decir:

Dim fechados, he, hi As String

en VBA eso es un error, la manera correcta es:

Dim fechados As String, he As String, hi As String

Tambien en VBA es un error esto: he = #8:00:00 AM#

Ese método es para asignar valor a una variable de Tiempo/Fecha en VB, no en VBA

En VBA usas DateValue() pero de todas formas, habías declarado las variables como String, osea nada que ver.

Ten cuidado de donde obtienes los códigos, a veces están hablando de VB y no de VBA, y repito, aunque se parezcan, son diferentes.

Andy M.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas