VBA: “+” ¿Concatenar o sumar?
23/04/2022Access: combobox rowsource
25/04/2022
Public Function ConvertirHoraEnDecimal(ByVal Hora As Date) As Single
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Fuente : https://access-global.net/vba-convertir-hora-en-decimal
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Título : ConvertirHoraEnDecimal
' Autor original : Luis Viadel | https://cowtechnologies.net
' Creado : enero 2013
' Propósito : convertir un formato hora en un formato decimal
' Retorno : nos devuelve un número (single) con el valor de la hora
' Argumento/s : La sintaxis de la función consta del siguiente argumento:
' Parte Modo Descripción
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Hora Obligatorio hora que queremos convertir
'-----------------------------------------------------------------------------------------------------------------------------------------------
' Test: : Para adaptar este código en tu aplicación puedes basarte en este procedimiento test. Copiar el bloque siguiente al
' portapapeles y pega en el editor de VBA. Descomentar la línea que nos interese y pulsar F5 para ver su funcionamiento.
'
' Sub ConvertirHoraEnDecimal_test()
'
' Debug.Print ConvertirHoraEnDecimal("11:30")
'
' End Sub
'-----------------------------------------------------------------------------------------------------------------------------------------------
Dim TB As Variant
TB = Split(Hora, ":")
ConvertirHoraEnDecimal = TB(0) + ((TB(1) * 100) / 60) / 100
End Function
1 Comment
Las fechas/horas se guardan en formato Double dentro de Access, la parte entera es el día y la parte decimal es la hora; por ese motivo Access no puede presentar la suma de horas que den más de 24 horas en total.
Las 23:59:59 tienen el valor 0.999988425925926, y 1 segundo tiene el valor 0.000011574074074
Si se suman, el resultado que da es 1, con lo que agrega 1 día a la fecha.
Para hacer la prueba, se pueden convertir los valores a fechas/horas con CDate, e incluso hacer la operación de suma convirtiendola a Fecha/hora
Debug.Print CDate (0.999988425925926)
Debug.Print CDate(0.000011574074074)
Debug.Print CDate(0.999988425925926 + 0.000011574074074)
Un saludo.
Alba.