Excel - Problema código VBA para mayúsculas y fechas

 
Vista:

Problema código VBA para mayúsculas y fechas

Publicado por Cazurro (2 intervenciones) el 27/06/2023 13:35:43
Buenos días a tod@s.

En primer lugar indicar que mis conocimientos de programación son nulos y todo el código que uso lo busco por internet. Prueba y error de toda la vida...

El caso es que, en una de las hojas del libro con el que estoy, ya que va a ser usado por varias personas, quería que cualquier texto introducido se transformara en mayúsculas independientemente de que el usuario que introduce los datos las tenga seleccionadas o no. Buscando, encontré este código que me ha funcionado perfecto:

1
2
3
4
5
6
7
8
9
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Or Target.HasFormula Then Exit Sub
On Error Resume Next
Application.EnableEvents = False
Target.Value = VBA.UCase(Target.Value)
Application.EnableEvents = True
On Error GoTo 0
End Sub


El problema lo tengo en que en la misma hoja, tengo una serie de columnas en las que se deben introducir fechas, y cual ha sido mi sorpresa que con el código anterior, me cambia automáticamente el formato de fechas español (dia/mes/año) al americano (mes/dia/año) (¿?). Ya que esto no es aceptable para lo que necesito, he intentado trampearlo configurando los formatos de celdas a "Personalizado" para que me mostrara el formato de fecha de la forma dia/mes/año, pero ya que en esas columnas tengo validación de datos para comparar las fechas entre sí, no ha sido posible.

Desde mi total ignorancia, había pensado que una posibilidad es asignar el código anterior a las columnas que me interesen (no sabría hacerlo). Otra posibiliddad que se me había ocurrido era cambiar el formato de las fechas también con código. He intentado esta última con un par de códigos, pero no ha habido suerte. Los dejo por si fueran de ayuda:

Primer código:

1
2
3
4
5
6
7
Function MakeUSDate(DateIn As Variant) As String
' Do nothing if the value is not a date.
If Not IsDate(DateIn) Then Exit Function
' Format the date value as a U.S. date formatted string expression.
MakeUSDate = "#" & Month(DateIn) & "/" & Day(DateIn) & "/" & Year(DateIn) & "#" ' -> Esta línea la cambié por la siguiente (por probar suerte):
MakeUSDate = "#" & Day(DateIn) & "/" & Month(DateIn) & "/" & Year(DateIn) & "#"
End Function

Segundo código:

1
2
3
4
Dim MyTime, MyDate, MyStr
MyTime = #17:04:23#
MyDate = #January 27, 1993#
MyStr = Format(MyDate, "dd/mm/yyyy")

Agradecería enormemente saber si se puede solucionar y la manera de hacerlo. Gracias de antemano por cualquier tipo de ayuda.

Un saludo.
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: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Problema código VBA para mayúsculas y fechas

Publicado por Antoni Masana (2478 intervenciones) el 27/06/2023 14:28:52
Esta es la solución:

1
2
3
4
5
6
7
8
9
10
11
Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Or Target.HasFormula Then Exit Sub
 
    If Application.IsText(Target.Value2) Then
        Application.EnableEvents = False
        Target.Value = UCase(Target.Value)
        Application.EnableEvents = True
    End If
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