Sie sind auf Seite 1von 29

Funciones para calcular y para mostrar

los valores de fecha y hora en Access


 Correo electrónico
 Imprimir

Ha finalizado el soporte técnico para


Office 2003
Microsoft puso fin al soporte técnico para Office 2003 el 8 de abril de 2014. Este
cambio ha afectado a las actualizaciones de software y las opciones de
seguridad. Sepa qué significa esto en su caso y cómo puede mantenerse protegido.

Moderado: requiere conocimientos básicos de macros, código e interoperabilidad.

Resumen
Dado que un valor de fecha y hora se almacena como un número de doble
precisión, puede recibir resultados con formato incorrecto al intentar tratar estos
valores en una expresión. En este artículo se demuestra cómo crear expresiones y
funciones personalizadas para mostrar fechas específicas y calcular intervalos de
horas.

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente,


sin ninguna garantía tanto expresa como implícita. Esto incluye, entre otras, las
garantías implícitas de comerciabilidad e idoneidad para un fin determinado. En
este artículo se da por supuesto que ya conoce el lenguaje de programación que se
muestra, así como las herramientas empleadas para crear y depurar
procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle
la funcionalidad de un determinado procedimiento, pero no modificarán estos
ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a
sus necesidades específicas.

Más información
Mostrar fechas concretas

Para mostrar fechas concretas, puede utilizar la función DateSerial() para tratar el
día, el mes y el año de una fecha. Por ejemplo, puede utilizar las expresiones
siguientes en la propiedad ControlSource de un cuadro de texto o en la ventana
Inmediata para devolver fechas concretas:

 El mes actual:

DateSerial(Year(Date()), Month(Date()), 1)

 El mes siguiente:

DateSerial(Year(Date()), Month(Date()) + 1, 1)

 El último día del mes actual:

DateSerial(Year(Date()), Month(Date()) + 1, 0)

 El último día del mes siguiente:

DateSerial(Year(Date()), Month(Date()) + 2, 0)

 El primer día del mes anterior:

DateSerial(Year(Date()), Month(Date())-1,1)

 El último día del mes anterior:

DateSerial(Year(Date()), Month(Date()),0)

 El primer día del trimestre actual:

DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 1, 1)

 El último día del trimestre actual:

DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 4, 0)

 El primer día de la semana actual (suponiendo que el domingo es el primer día):

Date() - WeekDay(Date()) + 1

 El último día de la semana actual:

Date() - WeekDay(Date()) + 7

 El primer día de la semana actual (con la configuración del cuadro de diálogo


Opciones):
Date() - WeekDay(Date(), 0) + 1

 El último día de la semana actual:

Date() - WeekDay(Date(), 0) + 7

Para obtener más información acerca de cómo calcular el año fiscal del mes fiscal,
haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge
Base:
210249 Cómo obtener el mes o el año fiscal de una fecha determinada en Access
2000
PRECAUCIÓN: si sigue los pasos de este ejemplo, modificará la base de datos de
ejemplo Neptuno.mdb. Quizás desee hacer copia de seguridad del archivo
Neptuno.mdb y seguir estos pasos en una copia de la base de datos.

Calcular intervalos de tiempo

Dado que un valor de hora se almacena como una fracción de un día de 24 horas,
puede recibir los resultados en un formato incorrecto al intentar sumar, restar,
multiplicar o dividir datos de hora mayores de 24 horas.

Por ejemplo, si intenta encontrar el número de horas transcurrido entre dos fechas
restando los valores en Visual Basic, puede que se devuelva un número incorrecto.
Para demostrar esto, escriba el código siguiente en la ventana Inmediata y observe
que se devuelve el valor 0:00 horas en lugar del valor correcto 53:00 horas:

StartDate=#6/1/93 8:00AM#

EndDate=#6/3/93 1:00PM#

?Format(EndDate-StartDate,"hh:mm")

Para resolver problemas de formato producidos por valores de hora mayores de 24


horas, puede utilizar las funciones Int() y CSng() en Visual Basic para separar un
valor de hora calculado en variables diferentes para los días, horas, minutos y
segundos. Por ejemplo, puede incluir el fragmento de código siguiente en una
función personalizada para crear variables de hora independientes:
'-------------------------------------------------------------------

' This sample code separates a time interval into seven variables for

' the following values: days, hours, minutes, seconds, total time in

' hours, total time in minutes, and total time in seconds.

'

' The interval argument is flexible; it can be a single value, an

' expression, or a field reference.

'-------------------------------------------------------------------

Dim totalhours As Long, totalminutes As Long, totalseconds As Long

Dim days As Long, hours As Long, minutes As Long, seconds As Long

Dim interval As Variant

days = Int(CSng(interval))

totalhours = Int(CSng(interval * 24))

totalminutes = Int(CSng(interval * 1440))

totalseconds = Int(CSng(interval * 86400))

hours = totalhours Mod 24

minutes = totalminutes Mod 60

seconds = totalseconds Mod 60

Puede utilizar las variables totalhours, totalminutes y totalseconds para mostrar un


valor de hora como una única unidad de tiempo. Las variables de días, horas,
minutos y segundos le permiten dividir un valor de hora en sus distintas partes.
Para mostrar los valores de hora en formatos diferentes, puede concatenar estas
variables según se demuestra en las funciones de ejemplo siguientes:

 La función GetElapsedDays () calcula el tiempo transcurrido entre dos valores de


fecha u hora, y muestra el resultado en días.
 La función GetElapsedTime () calcula el tiempo transcurrido entre los valores de
hora y muestra el resultado en días, horas, minutos y segundos.
 La función GetTimeCardTotal () suma un campo de valores de hora en una tabla y
muestra el total en horas y minutos.

Función de ejemplo GetElapsedDays()


Para crear la función GetElapsedDays(), siga estos pasos:

1. Abra la base de datos de ejemplo Neptuno.mdb.

2. Cree un módulo nuevo y escriba la línea siguiente en la sección de declaraciones si


aún no está:

3.

Option Explicit

4. Escriba la siguiente función:

5.

6. Function GetElapsedDays (interval)

7. Dim days As Long

8.

9. days = Int(CSng(interval))

10. GetElapsedDays = days & " Days "

End Function

11. Para probar esta función, cree una consulta nueva basada en la tabla Orders.

12. En la cuadrícula QBE, agregue los campos siguientes:

13. Campo: ShippedDate


14. Mostrar: True
15.
16. Campo: OrderDate
17. Mostrar: True
18.
19. Campo: ElapsedTime: GetElapsedDays([ShippedDate]-[OrderD
ate])

Mostrar: True

20. Ejecute la consulta. Tenga en cuenta que la columna ElapsedTime muestra el


número de días entre el campo ShippedDate y el campo OrderDate para cada
registro de la tabla Orders.

Función de ejemplo GetElapsedTime()

Para crear la función GetElapsedTime(), siga estos pasos:

1. Cree una tabla nueva con la estructura siguiente y guárdela como TimeLog.

2. Tabla: TimeLog
3. -----------------------
4. Nombre de campo: StartTime
5. Tipo de datos: Date/Time
6. Formato: General Date
7.
8. Nombre de campo: EndTime
9. Tipo de datos: Date/Time

Formato: General Date


10. Vea la tabla TimeLog en la vista Hoja de datos, escriba los tres registros siguientes
y, a continuación, cierre la tabla:

11. StartTime EndTime


12. --------------------------------------------
13. 5/10/95 4:57:00 PM 5/15/95 2:38:00 AM
14. 5/11/95 10:17:31 AM 5/24/95 6:05:00 PM

5/18/95 9:16:43 AM 5/19/95 5:03:00 PM

15. Cree un módulo y escriba la línea siguiente en la sección de declaraciones:

16.

Option Explicit

17. Escriba la función siguiente:

18.

19. Function GetElapsedTime(interval)

20.

21. Dim totalhours As Long, totalminutes As Long, totalseconds As _

22. Long

23. Dim days As Long, hours As Long, Minutes As Long, Seconds As Long

24.

25. days = Int(CSng(interval))

26. totalhours = Int(CSng(interval * 24))

27. totalminutes = Int(CSng(interval * 1440))


28. totalseconds = Int(CSng(interval * 86400))

29. hours = totalhours Mod 24

30. Minutes = totalminutes Mod 60

31. Seconds = totalseconds Mod 60

32.

33. GetElapsedTime = days & " Days " & hours & " Hours " & Minutes & _

34. " Minutes " & Seconds & " Seconds "

35.

End Function

NOTA: la función GetElapsedTime requiere que se le pase una fecha y una hora.

36. Para probar esta función, cree un nuevo informe basado en la


tabla TimeLog utilizando el Asistente para informes automáticos.
37. Vea el informe en la vista Diseño.

38. Agregue un cuadro de texto independiente a la sección de detalles de la tabla


TimeLog y establezca sus propiedades como sigue:

39. Textbox
40. ---------------
41. Name: ElapsedTime
42. ControlSource: =GetElapsedTime([EndTime]-[StartTime])

Width: 3 pulgadas

43. Vea el informe. Observe que cada registro muestra el tiempo total transcurrido en
días, horas, minutos y segundos.
Función de ejemplo GetTimeCardTotal()

Para crear la función GetTimeCardTotal(), siga estos pasos:

NOTA: el código de ejemplo de este artículo utiliza Microsoft Data Access Objects.
Para que este código se ejecute correctamente, debe hacer referencia a la
Biblioteca de objetos de Microsoft DAO 3.6. Para ello, haga clic en Referencias en
el menú Herramientas del Editor de Visual Basic y asegúrese de que la
casilla Biblioteca de objetos de Microsoft DAO 3.6 está activada.

1. Cree una tabla nueva con la estructura siguiente y guárdela como TimeCard.

2. Tabla: TimeCard
3. -----------------------
4. Nombre de campo: Daily Hours
5. Tipo de datos: Date/Time

Formato: Short Time

6. Vea la tabla TimeCard en la vista Hoja de datos, escriba los cuatro registros
siguientes y, a continuación, cierre la tabla:

7. 8:15
8. 7:37
9. 8:12

8:03
10. Cree un módulo nuevo y escriba la línea siguiente en la sección de declaraciones si
aún no está:

11.

Option Explicit

12. Escriba la siguiente función:

13.

14. Function GetTimeCardTotal ()

15.

16. Dim db As DAO.Database, rs As DAO.Recordset

17. Dim totalhours As Long, totalminutes As Long

18. Dim days As Long, hours As Long, minutes As Long

19. Dim interval As Variant, j As Integer

20.

21. Set db = dbengine.workspaces(0).databases(0)

22. Set rs = db.OpenRecordset("timecard")

23. interval = #12:00:00 AM#

24. While Not rs.EOF

25. interval = interval + rs![Daily hours]

26. rs.MoveNext

27. Wend

28. totalhours = Int(CSng(interval * 24))

29. totalminutes = Int(CSng(interval * 1440))

30. hours = totalhours Mod 24

31. minutes = totalminutes Mod 60

32.

33. GetTimeCardTotal = totalhours & " hours and " & minutes & " minutes"
34.

End Function

35. Para probar esta función, escriba la línea siguiente en la ventana Inmediata y, a
continuación, presione ENTRAR:

36.

?GetTimeCardTotal()

Observe que la ventana Inmediata muestra 32 horas y 7 minutos.


Cómo seleccionar celdas y rangos
mediante procedimientos de Visual
Basic
 Correo electrónico
 Imprimir

Ha finalizado el soporte técnico para


Office 2003
Microsoft puso fin al soporte técnico para Office 2003 el 8 de abril de 2014. Este
cambio ha afectado a las actualizaciones de software y las opciones de
seguridad. Sepa qué significa esto en su caso y cómo puede mantenerse protegido.

Más información
Microsoft proporciona ejemplos de programación sólo como ilustración, sin
ninguna garantía ya sea expresa o implícita. Esto incluye, entre otras, las garantías
implícitas de comerciabilidad e idoneidad para un fin determinado. En este artículo
se da por supuesto que ya conoce el lenguaje de programación que se muestra, así
como las herramientas empleadas para crear y depurar procedimientos. Los
ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de
un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer
mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades
específicas. En los ejemplos de este artículo se usan los métodos de Visual Basic
que se enumeran en la tabla siguiente.

Método Argumentos
------------------------------------------
Activate none
Cells rowIndex, columnIndex
Application.Goto reference, scroll
Offset rowOffset, columnOffset
Range cell1
cell1, cell2
Resize rowSize, columnSize
Select none
Sheets index (or sheetName)
Workbooks index (or bookName)
End direction
CurrentRegion none

En los ejemplos de este artículo se usan las propiedades de tabla siguiente.

Propiedad Uso
----------------------------------------------------------------
-----
ActiveSheet para especificar la hoja activa ActiveWorkboo
k para especificar el libro activo Columns.Count para contar
el número de columnas del elemento especificado Rows.Count
para contar el número de filas del elemento especificado Selectio
n para hacer referencia al rango seleccionado

1: Seleccionar una celda en la hoja de cálculo activa

Para seleccionar la celda D5 en la hoja de cálculo activa puede utilizar cualquiera de


los ejemplos siguientes:

ActiveSheet.Cells(5, 4).Select

o bien

ActiveSheet.Range("D5").Select
2: Seleccionar una celda en otra hoja de cálculo del mismo libro

Para seleccionar la celda E6 en otra hoja de cálculo del mismo libro, puede utilizar
cualquiera de los ejemplos siguientes:

Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)

o bien

Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))

O bien, puede activar la hoja y usar el método 1 que aparece más arriba para
seleccionar la celda:

Sheets("Sheet2").Activate

ActiveSheet.Cells(6, 5).Select

3: Seleccionar una celda en una hoja de cálculo de un libro diferente

Para seleccionar la celda F7 en una hoja de cálculo de un libro diferente, puede


utilizar cualquiera de los ejemplos siguientes:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
o bien

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")

O bien, puede activar la hoja y usar el método 1 que aparece más arriba para
seleccionar la celda:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate

ActiveSheet.Cells(7, 6).Select

4: Seleccionar un rango de celdas en la hoja de cálculo activa

Para seleccionar el rango C2:D10 en la hoja de cálculo activa puede utilizar


cualquiera de los ejemplos siguientes:

ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select

ActiveSheet.Range("C2:D10").Select

ActiveSheet.Range("C2", "D10").Select
5: Seleccionar un rango de celdas en otra hoja de cálculo del mismo
libro

Para seleccionar el rango D3:E11 de otra hoja de cálculo del mismo libro, puede
utilizar cualquiera de los ejemplos siguientes:

Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")

Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")

O bien, puede activar la hoja y usar el método 4 que aparece más arriba para
seleccionar el rango:

Sheets("Sheet3").Activate

ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select

6: Seleccionar un rango de celdas en una hoja de cálculo de un libro


diferente

Para seleccionar el rango E4:F12 de una hoja de cálculo en un libro diferente, puede
utilizar cualquiera de los ejemplos siguientes:

Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")

Application.Goto _

Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")
O bien, puede activar la hoja y usar el método 4 que aparece más arriba para
seleccionar el rango:

Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate

ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select

7: Seleccionar un rango con nombre en la hoja de cálculo activa

Para seleccionar el rango con nombre "Test" de la hoja de cálculo activa puede
utilizar cualquiera de los ejemplos siguientes:

Range("Test").Select

Application.Goto "Test"

8: Seleccionar un rango con nombre en otra hoja de cálculo del mismo


libro

Para seleccionar el rango con nombre "Test" de otra hoja de cálculo del mismo
libro, puede utilizar cualquiera de los ejemplos siguientes:

Application.Goto Sheets("Sheet1").Range("Test")
O bien, puede activar la hoja y usar el método 7 que aparece más arriba para
seleccionar el rango con nombre:

Sheets("Sheet1").Activate

Range("Test").Select

9: Seleccionar un rango con nombre en una hoja de cálculo de un libro


diferente

Para seleccionar el rango con nombre "Test" de una hoja de cálculo de un libro
diferente, puede utilizar cualquiera de los ejemplos siguientes:

Application.Goto _

Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")

O bien, puede activar la hoja y usar el método 7 que aparece más arriba para
seleccionar el rango con nombre:

Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate

Range("Test").Select

10: Seleccionar una celda relativa a la celda activa


Para seleccionar una celda que se encuentra cinco filas más abajo y cuatro
columnas a la izquierda de la celda activa, puede utilizar el ejemplo siguiente:

ActiveCell.Offset(5, -4).Select

Para seleccionar una celda que se encuentra dos filas más arriba y tres columnas a
la derecha de la celda activa, puede utilizar el ejemplo siguiente:

ActiveCell.Offset(-2, 3).Select

Nota: Se producirá un error si intenta seleccionar una celda que esté "fuera de la
hoja". El primer ejemplo anterior devolverá un error si la celda activa se encuentra
entre en las columnas A a D, ya que si se mueve cuatro columnas a la izquierda, la
celda activa se desplazaría a una dirección de celda no válida.

11: Seleccionar una celda relativa a otra celda (distinta de la activa)

Para seleccionar una celda que se encuentra cinco filas más abajo y cuatro
columnas a la izquierda de la celda C7, puede utilizar los ejemplos siguientes:

ActiveSheet.Cells(7, 3).Offset(5, 4).Select

ActiveSheet.Range("C7").Offset(5, 4).Select

12: Seleccionar un rango de celdas separadas por un rango específico


Para seleccionar un rango de celdas que sea del mismo tamaño que el rango con
nombre "Prueba" pero que estén desplazadas cuatro filas más abajo y tres
columnas a la derecha, puede utilizar el ejemplo siguiente:

ActiveSheet.Range("Test").Offset(4, 3).Select

Si el rango con nombre está en otra hoja (que no sea la activa), active primero esa
hoja y, a continuación, seleccione el rango con el ejemplo siguiente:

Sheets("Sheet3").Activate

ActiveSheet.Range("Test").Offset(4, 3).Select

13: Seleccionar un rango especificado y cambiar el tamaño de la


selección

Para seleccionar el rango con nombre "Base de datos" y, a continuación, extender la


selección cinco filas, puede utilizar el ejemplo siguiente:

Range("Database").Select

Selection.Resize(Selection.Rows.Count + 5, _

Selection.Columns.Count).Select

14: Seleccionar un rango especificado, desplazarlo y cambiar su


tamaño
Para seleccionar un rango cuatro filas más abajo y tres columnas a la derecha del
rango con nombre "Base de datos" e incluir dos filas y una columna más que el
rango con nombre, puede utilizar el ejemplo siguiente:

Range("Database").Select

Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, _

Selection.Columns.Count + 1).Select

15: Seleccionar la unión de dos o más rangos especificados

Para seleccionar la unión (es decir, el área combinada) de los dos rangos con
nombre "Prueba" y "Ejemplo", puede utilizar el ejemplo siguiente:

Application.Union(Range("Test"), Range("Sample")).Select

Tenga en cuenta que ambos rangos deben estar en la misma hoja para que este
ejemplo funcione. Observe también que el método Union no funciona entre
diferentes hojas. Por ejemplo, esta línea funciona correctamente

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))

pero esta línea

Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))


devuelve el mensaje de error:
Error en la clase de aplicación del método Union

16: Seleccionar la intersección de dos o más rangos especificados

Para seleccionar la intersección de los dos rangos con nombre "Prueba" y


"Ejemplo", puede utilizar el ejemplo siguiente:

Application.Intersect(Range("Test"), Range("Sample")).Select

Tenga en cuenta que ambos rangos deben estar en la misma hoja para que este
ejemplo funcione.

Los ejemplos 17 a 21 de este artículo hacen referencia al siguiente conjunto de


datos de ejemplo. En cada ejemplo se especifica el rango de celdas de los datos del
ejemplo que se seleccionarían.

A1: Nombre B1: Ventas C1: Cantidad


A2: a B2: $10 C2: 5
A3: b B3: C3: 10
A4: c B4: $10 C4: 5
A5: B5: C5:
R6: Total B6: $20 C6: 20

17: Seleccionar la última celda de una columna de datos contiguos


Para seleccionar la última celda de una columna contigua, utilice el ejemplo
siguiente:

ActiveSheet.Range("a1").End(xlDown).Select

Cuando este código se utilice con la tabla de ejemplo, se seleccionará la celda A4.

18: Seleccionar la celda en blanco en la parte inferior de una columna


de datos contiguos

Para seleccionar la celda debajo de un rango de celdas contiguas, utilice el ejemplo


siguiente:

ActiveSheet.Range("a1").End(xlDown).Offset(1,0).Select

Cuando este código se utilice con la tabla de ejemplo, se seleccionará la celda A5

19: Seleccionar un rango completo de celdas contiguas en una


columna

Para seleccionar un rango de celdas contiguas en una columna, utilice uno de los
ejemplos siguientes:

ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select

o bien
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1"). _

End(xlDown).Address).Select

Cuando este código se utilice con la tabla de ejemplo, se seleccionarán las celdas
A1 a A4.

20: Seleccionar un rango completo de celdas que no sean contiguas en


una columna

Para seleccionar un rango de celdas que no sean contiguas, utilice uno de los
ejemplos siguientes:

ActiveSheet.Range("a1",ActiveSheet.Range("a65536").End(xlUp)).Select

o bien

ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536"). _

End(xlUp).Address).Select

Cuando este código se utilice con la tabla de ejemplo, se seleccionarán las celdas
A1 a A6.

21: Seleccionar un rango rectangular de celdas


Para seleccionar un rango de celdas rectangular alrededor de una celda, utilice el
método CurrentRegion. El rango seleccionado mediante el
método CurrentRegion es un área limitada por cualquier combinación de filas en
blanco y columnas vacías. A continuación se muestra un ejemplo de cómo utilizar el
método CurrentRegion:

ActiveSheet.Range("a1").CurrentRegion.Select

Este código seleccionará las celdas A1 a C4. A continuación se enumeran más


ejemplos de selección de celdas del mismo rango:

ActiveSheet.Range("a1", _

ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select

o bien

ActiveSheet.Range("a1:" & _

ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select

En algunos casos, es posible que quiera seleccionar las celdas A1 a C6. En este
ejemplo, el método CurrentRegion no funcionará por la línea vacía de la fila 5. Los
siguientes ejemplos harán que se seleccionen todas las celdas:

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column

lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row

ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select


o bien

lastCol = ActiveSheet.Range("a1").End(xlToRight).Column

lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row

ActiveSheet.Range("a1:" & _

ActiveSheet.Cells(lastRow, lastCol).Address).Select

22: Seleccionar varias columnas no contiguas de longitud variable

Para seleccionar varias columnas no contiguas de longitud variable, utilice la tabla


de ejemplo siguiente y el ejemplo de macro:

A1: 1 B1: 1 C1: 1 D1: 1


A2: 2 B2: 2 C2: 2 D2: 2
A3: 3 B3: 3 C3: 3 D3: 3
A4: B4: 4 C4: 4 D4: 4
A5: B5: 5 C5: 5 D5:
R6: B6: C6: 6 D6:

StartRange = "A1"

EndRange = "C1"

Set a = Range(StartRange, Range(StartRange).End(xlDown))

Set b = Range(EndRange, Range(EndRange).End(xlDown))

Union(a,b).Select
Cuando este código se utilice con la tabla de ejemplo, se seleccionarán las celdas
A1:A3 y C1:C6.

NOTAS SOBRE LOS EJEMPLOS

 Normalmente se puede omitir la propiedad ActiveSheet, ya que se considera


implícita si una hoja concreta no tiene nombre. Por ejemplo, en lugar de escribir

 ActiveSheet.Range("D5").Select

puede utilizar:

Range("D5").Select

 Generalmente también se puede omitir la propiedad ActiveWorkbook. A menos


que se nombre un libro concreto, el libro activo se considera implícito.
 Cuando use el método Application.Goto y desee utilizar dos métodos Cells dentro
del método Range cuando el rango especificado esté en otra hoja (no en la activa),
deberá incluir el objeto Sheets cada vez. Por ejemplo:

 Application.Goto Sheets("Sheet1").Range( _

 Sheets("Sheet1").Range(Sheets("Sheet1").Cells(2, 3), _

 Sheets("Sheet1").Cells(4, 5)))
 Para cualquier elemento entre comillas (por ejemplo, el rango con nombre
"Prueba"), también puede utilizar una variable cuyo valor sea una cadena de texto.
Por ejemplo, en lugar de escribir

 ActiveWorkbook.Sheets("Sheet1").Activate

puede utilizar

ActiveWorkbook.Sheets(myVar).Activate

donde el valor de myVar es "Sheet1".

Listo, tengo una posible solución. Estoy seguro de que no es como lo querías pero
te puede ayudar.
El problema es que el formato Fecha/Hora solo soporta hasta 24 horas, después
de eso reinicia a 0 y asume que es un nuevo día. Para lo que deseas debes
hacerlo por separado.
Private Sub btnSumar_Click(sender As Object, e As EventArgs) Handles
btnSumar.Click
Dim hora1 As Single
Dim minuto1 As Single
Dim hora2 As Single
Dim minuto2 As Single
Dim horasuma As Single
Dim minutosuma As Single
'Esto lo puedes modificar dependiendo de la cantidad de TextBox
hora1 = TimeValue(txtHora1.Text).Hour 'Tomamos la Hora del primer TextBox
hora2 = TimeValue(txtHora2.Text).Hour 'Tomamos la Hora del segundo TextBox
minuto1 = TimeValue(txtHora1.Text).Minute 'Tomamos los minutos del primer
TextBox
minuto2 = TimeValue(txtHora2.Text). Minute 'Tomamos los minutos del segundo
TextBox
minutosuma = minuto1 + minuto2 'Sumamos los minutos
horasuma = hora1 + hora2 'Sumamos las horas
'Desde aquí se mantiene igual
horasuma = horasuma + Math.Floor(minutosuma / 60) 'Ajustamos las horas por
excedente de 60 minutos por hora
minutosuma = ((minutosuma / 60) - Math.Floor(minutosuma / 60)) * 60 'Ajustamos
los minutos en base a 60 minutos por hora
txtHoraSuma.Text = horasuma & ":" & minutosuma 'Asignamos al tercer TextBox
End Sub
Esta hecho para 2TextBox pero es fácilmente adaptable a 8.

Das könnte Ihnen auch gefallen