Visual Basic para Aplicaciones - Reemplazo de horas

Life is soft - evento anual de software empresarial
 
Vista:

Reemplazo de horas

Publicado por Marcos (2 intervenciones) el 22/05/2023 15:48:36
No me resulta este código, por favor alguien me puede ayudar para saber qué está mal


Sub ReemplazarHora()
Dim columna As Range
Dim celda As Range
Dim horaOriginal As Date
Dim horaReemplazo As Date

' Especifica la hoja de trabajo y la columna donde se encuentra la hora a reemplazar
Dim hoja As Worksheet
Set hoja = ThisWorkbook.Sheets("reporte") ' Reemplaza "Nombre de la hoja" con el nombre de tu hoja de trabajo
Dim columnaReemplazo As Range
Set columnaReemplazo = hoja.Range("K:K") ' Reemplaza "A:A" con la referencia de tu columna

' Especifica la hora original y la hora de reemplazo
horaOriginal = TimeValue("18:00:00")
horaReemplazo = TimeValue("18:59:59")

' Desactiva el cálculo automático para mejorar el rendimiento
Application.Calculation = xlCalculationManual

' Desactiva el refresco de pantalla para mejorar el rendimiento
Application.ScreenUpdating = False

' Recorre cada celda en la columna
For Each celda In columnaReemplazo
' Verifica si el contenido de la celda es una hora
If IsDate(celda.Value) Then
' Verifica si la hora en la celda coincide con la hora original
If TimeValue(celda.Value) = horaOriginal Then
' Reemplaza la hora original por la hora de reemplazo
celda.Value = horaReemplazo
End If
End If
Next celda

' Activa el cálculo automático nuevamente
Application.Calculation = xlCalculationAutomatic

' Activa el refresco de pantalla nuevamente
Application.ScreenUpdating = True
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Reemplazo de horas

Publicado por Antoni Masana (500 intervenciones) el 23/05/2023 16:04:33
Con la explicación que das no se que significa: "No me resulta este código"

Si miro el código veo que esta bién, hace lo que se le a dicho al código que haga.
No veo ningun error de sintaxis.
De lógica tampoco porque como no ser que se quiere que haga no se si lo hace o no lo hace.
La macro depende del valor de unas celdas que no se que tienen, por lo que no se donde puede estar el problema.

PARA QUE TE PODAMOS SOLUCIONAR EL PROBLEMA:
* Subir el libro.
* Explicar que es lo que se desea que realice la macro
* Que hace mal o no hace.

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
Sub ReemplazarHora()
    Dim columna As Range
    Dim celda As Range
    Dim horaOriginal As Date
    Dim horaReemplazo As Date
 
    ' ---&--- Especifica la hoja de trabajo y la columna donde se encuentra la hora a reemplazar
    Dim hoja As Worksheet
    Set hoja = ThisWorkbook.Sheets("reporte") ' ---&--- Reemplaza "Nombre de la hoja" con el nombre de tu hoja de trabajo
    Dim columnaReemplazo As Range
    Set columnaReemplazo = hoja.Range("K:K") ' ---&--- Reemplaza "A:A" con la referencia de tu columna
 
    ' ---&--- Especifica la hora original y la hora de reemplazo
    horaOriginal = TimeValue("18:00:00")
    horaReemplazo = TimeValue("18:59:59")
 
    ' ---&--- Desactiva el cálculo automático para mejorar el rendimiento
    Application.Calculation = xlCalculationManual
 
    ' ---&--- Desactiva el refresco de pantalla para mejorar el rendimiento
    Application.ScreenUpdating = False
 
    ' ---&--- Recorre cada celda en la columna
    For Each celda In columnaReemplazo
        ' ---&--- Verifica si el contenido de la celda es una hora
        If IsDate(celda.Value) Then
            ' ---&--- Verifica si la hora en la celda coincide con la hora original
            If TimeValue(celda.Value) = horaOriginal Then
                ' ---&--- Reemplaza la hora original por la hora de reemplazo
                celda.Value = horaReemplazo
            End If
        End If
    Next celda
 
    ' ---&--- Activa el cálculo automático nuevamente
    Application.Calculation = xlCalculationAutomatic
 
    ' ---&--- Activa el refresco de pantalla nuevamente
    Application.ScreenUpdating = True
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reemplazo de horas

Publicado por Marcos (2 intervenciones) el 23/05/2023 18:26:13
por cuestiones de confidencialidad no puedo subir el archivo. Sin embargo, lo que necesito es poder reemplazar un nueva hora en toda la columna K, que ya viene con distintas horas. El problema es que cuando corro la macro, ésta no hace nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Reemplazo de horas

Publicado por Antoni Masana (500 intervenciones) el 24/05/2023 00:13:48
Puedes hacer una copia de la columna K en un nuevo libro con una sola hoja que se llame reporte o copiar el libro y borrar todo lo que sea confidencial.

Hay 2 casos en los que no funciona, bueno en tu caso hay 3 casos.

1º.- No es una hora, es un texto.
2º.- Contiene fecha y hora.
3º.- Que realices la pregunta equivocada.

El primer caso está claro.
El segundo y el tercero están muy relacionados. En primer lugar voy a explicar como trata internamente las fecha y las horas el Excel:
- Una fecha se guarda como un número entero que representa el número de días desde el 01/01/1900, siendo 1 este primer día, NO se puede expresar fechas en formato fecha anteriores a esta.
- Una hora es un número decimal, un segundo equivale a 1/86400. Esta cantidad 86400 es igual a a los segundos que tiene un día:

24 horas * 60 minutos que tiene una hora * 60 segundos que tiene un minuto =86400

Si la celda tiene el valor 0,75 esto representa la hora: 18:00:00
En cambio si tiene el valor 1,75 esto representa: 01/01/1900 18:00:00

Sigamos: la función IsDate() reconoce una fecha, NO una hora,
ver: https://learn.microsoft.com/es-es/office/vba/language/reference/user-interface-help/isdate-function

La funciónIsTime() no existe, en este caso utilizaremos la función IsNumeric() para el primer IF
En el segundo IF el valor de la celda ya esta en formato numérico por lo que no tiene sentido convertir un número en número.
Ver: https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/timevalue-function

Lo que hace la función TimeValue() es convertir un texto en formato hora.

Y esta es la macro corregida:

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
Sub ReemplazarHora()
    Dim columna As Range, celda As Range, horaOriginal As Date, horaReemplazo As Date, _
        hoja As Worksheet, columnaReemplazo As Range
 
''' Set hoja = ThisWorkbook.Sheets("reporte")
    Sheets("reporte").Select
    Set columnaReemplazo = hoja.Range("K:K")
 
    horaOriginal = TimeValue("18:00:00")
    horaReemplazo = TimeValue("18:59:59")
 
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
 
    For Each celda In columnaReemplazo
        If IsNumeric(celda.Value) Then
            If celda.Value = horaOriginal Then
                celda.Value = horaReemplazo
            End If
        End If
    Next celda
 
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub

Si sigue sin funcionar sube el libro.


NOTA:

- Esta instrucción no tiene ninguna utilidad en la macro: Set hoja = ThisWorkbook.Sheets("reporte")
- En cambio esta selecciona la hoja donde se va a ejecutar la macro: Sheets("reporte").Select

Si tienes varias hojas con la primera opción la macro se ejecuta en la hoja activa sea o no la "Reporte", con la segunda siempre se ejecuta en la hoja correcta.


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reemplazo de horas

Publicado por Fountain (1 intervención) el 02/09/2023 14:15:32
Let's maintain mutual understanding and cooperation to get the most out of forum discussions.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar