Formato de fecha se cambia a mm/dd/aaaa VBA

Siempre he contado con su apoyo

Tengo un Textbox1 que almacena la fecha actual en formato dd/mm/aaaa

Pero si el día es menor a 13, entonces invierte el formato a mm/dd/aaaa  porque la computadora tiene este formato establecido (mm/dd/aaaa) no puedo cambiar el formato de la computadora debido a que cambiaría muchos programas.

Requiero de su ayuda para una instrucción en VBA para que al grabar en la celda lo haga con el formato dd/mm/aaaa

Estas son las instrucciones que tengo:

Private Sub UserForm_Initialize()
   Application.ScreenUpdating = False
   Sheets("Data").Select
   finx = Sheets("Data").Range("B" & Rows.Count).End(xlUp).Row + 1
  TextBox1.Value = Format(Date, "dd/mm/yyyy")
End Sub

Al oprimir el boton guardar....

Private Sub CommandButton1_Click() 

   Range("B" & finx) = CDate(TextBox1)

Endsub

1 respuesta

Respuesta
1

No veo en el CommandButton el valor o cómo obtienes el valor de la variable finx, supongo que la tienes declarada como variable global.

Prueba con esto para poner la fecha:

Private Sub CommandButton1_Click()
  Dim fec As String
  fec = Mid(TextBox1, 4, 2) & "/" & Mid(TextBox1, 1, 2) & "/" & Mid(TextBox1, 7, 4)
  Range("B" & finx) = CDate(fec)
  Range("B" & finx).NumberFormat = "dd/mm/yyyy"
End Sub

Dante

Muchas gracias por tu respuesta, siempre son muy acertadas.

Me marca error run time error 13 Type mismatch en la siguiente línea:

Range("B" & finx) = CDate(fec)

¿Modificaste algo de la macro?

¿Tienes declarada la variable fec en alguna otra parte?

¿Puedes poner aquí todo tu código?

No Dante, no modifique nada, la variable fec solo esta una vez


Dim valc As String
Dim Sal As String
Dim v_user As String
Dim val_r As String
Dim val_c3 As String
Dim finx As Long 'es la variable que guardará la fila a ocupar

' < Boton Guardar >
Private Sub CommandButton1_Click()
Dim fec As String
' Desproteger la hoja para grabar datos capturados
es_admin = Worksheets("Usuarios2").Range("C2").Value
Sheets("Data").Select
Worksheets("Data").Unprotect CStr(es_admin)
' Pasar Datos capturados y Variables
Sheets("Data").Select
'instruccion original Range("B" & finx) = CDate(TextBox1)
'insruccion alterna Range("B" & finx).Value = Format(CDate(TextBox1.Value), "*MM/DD/YYYY")
fec = Mid(TextBox1, 4, 2) & "/" & Mid(TextBox1, 1, 2) & "/" & Mid(TextBox1, 7, 4)
Range("B" & finx) = CDate(fec)
Range("B" & finx).NumberFormat = "dd/mm/yyyy"
Range("C" & finx) = valc
Range("D" & finx) = Sal
Sheets("Principal").Select
v_user = Worksheets("Principal").Range("J22").Value
Sheets("Data").Select
Range("E" & finx) = v_user
Range("F" & finx) = val_r
Range("G" & finx) = val_c3
MsgBox "Alta exitosa. Actualizando Datos.", vbInformation, "EXCELeINFO"

' Volver a proteger la hoja de datos capturados
es_admin = Worksheets("Usuarios2").Range("C2").Value
Sheets("Data").Select
Worksheets("Data").Protect CStr(es_admin)
Unload Me 'se quedó en última hoja actualizada

End Sub

Private Sub CommandButton2_Click() ' << Rutina para Boton Cancelar >>

Controls("TextBox1") = ""
ComboBox1 = ""
ComboBox2 = ""
ComboBox3 = ""
Unload Me
End Sub

Private Sub ComboBox1_Change()
valc = ComboBox1.Value
valcc = CStr(valc)
Sal = Application.WorksheetFunction.VLookup(valcc, Usuarios2.Range("N2:O5"), 2, False)
End Sub

Private Sub ComboBox2_Change()
val_r = ComboBox2.Value
End Sub

Private Sub ComboBox3_Change()
val_c3 = ComboBox3.Value
End Sub


Private Sub UserForm_Initialize()
' Busca la ultima fila y determina la siguiente vacia para asignar variables
' Impedir que se vea el movimiento de hojas
Application.ScreenUpdating = False
Sheets("Data").Select
finx = Sheets("Data").Range("B" & Rows.Count).End(xlUp).Row + 1
TextBox1.Value = Format(Date, "dd/mm/yyyy")
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'regresa a hoja Menu
Sheets("Principal").Select
End Sub


Private Sub TextBox1_Change()

End Sub

¿Al momento de la ejecución qué tienes en el textbox1?

Según tu descripción, debes tener algo como esto:

04/04/2021

22/04/2021

Y algo más, en lo sucesivo, procura poner el código utilizando el icono para Insertar código fuente.

No Dante, no modifique nada, y la variable fec solo esta una vez 


Dim valc As String
Dim Sal As String
Dim v_user As String
Dim val_r As String
Dim val_c3 As String
Dim finx As Long 'es la variable que guardará la fila a ocupar

' < Boton Guardar >
Private Sub CommandButton1_Click()
Dim fec As String
' Desproteger la hoja para grabar datos capturados
es_admin = Worksheets("Usuarios2").Range("C2").Value
Sheets("Data").Select
Worksheets("Data").Unprotect CStr(es_admin)
' Pasar Datos capturados y Variables
Sheets("Data").Select
'instruccion original Range("B" & finx) = CDate(TextBox1)
'insruccion alterna Range("B" & finx).Value = Format(CDate(TextBox1.Value), "*MM/DD/YYYY")
fec = Mid(TextBox1, 4, 2) & "/" & Mid(TextBox1, 1, 2) & "/" & Mid(TextBox1, 7, 4)
Range("B" & finx) = CDate(fec)
Range("B" & finx).NumberFormat = "dd/mm/yyyy"
Range("C" & finx) = valc
Range("D" & finx) = Sal
Sheets("Principal").Select
v_user = Worksheets("Principal").Range("J22").Value
Sheets("Data").Select
Range("E" & finx) = v_user
Range("F" & finx) = val_r
Range("G" & finx) = val_c3
MsgBox "Alta exitosa. Actualizando Datos.", vbInformation, "EXCELeINFO"

' Volver a proteger la hoja de datos capturados
es_admin = Worksheets("Usuarios2").Range("C2").Value
Sheets("Data").Select
Worksheets("Data").Protect CStr(es_admin)
Unload Me 'se quedó en última hoja actualizada

End Sub

Private Sub CommandButton2_Click() ' << Rutina para Boton Cancelar >>

Controls("TextBox1") = ""
ComboBox1 = ""
ComboBox2 = ""
ComboBox3 = ""
Unload Me
End Sub

Private Sub ComboBox1_Change()
valc = ComboBox1.Value
valcc = CStr(valc)
Sal = Application.WorksheetFunction.VLookup(valcc, Usuarios2.Range("N2:O5"), 2, False)
End Sub

Private Sub ComboBox2_Change()
val_r = ComboBox2.Value
End Sub

Private Sub ComboBox3_Change()
val_c3 = ComboBox3.Value
End Sub


Private Sub UserForm_Initialize()
' Busca la ultima fila y determina la siguiente vacia para asignar variables
' Impedir que se vea el movimiento de hojas
Application.ScreenUpdating = False
Sheets("Data").Select
finx = Sheets("Data").Range("B" & Rows.Count).End(xlUp).Row + 1
TextBox1.Value = Format(Date, "dd/mm/yyyy")
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'regresa a hoja Menu
Sheets("Principal").Select
End Sub


Private Sub TextBox1_Change()

End Sub

El textbox1  trae la fecha actual del sistema

Supongo que no estás poniendo la fecha completa.

Es decir para el 5 de abril de 2021, en el textbox deberías poner

05/04/2021

Supongo que estás poniendo algo así:

5/4/2021

Pero sí deberás poner las 2 diagonales.

Entonces utiliza lo siguiente:

  Dim fec As Variant
  fec = Split(TextBox1, "/")(1) & "/" & Split(TextBox1, "/")(0) & "/" & Split(TextBox1, "/")(2)
  Range("B" & finx) = CDate(fec)
  Range("B" & finx).NumberFormat = "dd/mm/yyyy"

Podrías ser más explicito

El textbox1 trae la fecha actual del sistema

Puedes poner aquí una imagen, para que yo pueda ver el contenido del textbox1

O escribe aquí el contenido del textbox1 al momento del error.

Necesito ver qué dato tienes, si me dices "trae una fecha" no me ayudas. Tienes que poner aquí el contenido del textbox.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas