viernes, 22 de abril de 2016

Dando formato de fecha a un TextBox




Generalmente cuando trabajamos con fechas desde un TextBox en un UserForm, no obtenemos el formato que deseamos.
En américa latina utilizamos el formato "DIA-MES-AÑO", sin embargo, cuando insertamos la fecha en un TextBox, no obtenemos ese formato, por lo que nos devuelve siempre el formato de "MES-DIA-AÑO". Y esto se debe a que el formato está diseñado exclusivamente para Estados Unidos.


En el año 2014, publiqué un vídeo en mi canal de YouTube, dando solución a este problema. Si bien es cierto que se resuelve ese problema, PERO... aquí viene el pero... no es una solución muy elegante que digamos, ya que se utilizan demasiadas líneas de código.

Recientemente un seguidor me abordó con el tema, manifestando que esa solución era demasiado complicada para implementarla cuando estamos trabajando con muchos TextBox que manejan fechas; por lo que me puse a hacer pruebas de diferentes formas, dando con la solución, la cual he tenido frente a mí todo el tiempo. Y me refiero a la siguiente línea:

Format(TextBox1, "MM/DD/YYYY")

Pueden notar que el formato es de "MES-DIA-AÑO", pero al obtener el resultado en la celda, pues sencillamente nos devuelve el formato de "DIA-MES-.AÑO".


Private Sub CommandButton1_Click()
   ActiveCell = Format(TextBox1, "MM/DD/YYYY")
End Sub



Con esto se soluciona ese problema de una forma más elegante.

Aquí les dejo el archivo con el ejemplo de la solución.


Además pueden descargar el archivo de cómo filtrar fechas, según el ejemplo del vídeo de YouTube, pero con el código modificado según esta solución.

Si te ha gustado este artículo... compártelo con tus amigos en las diferentes redes sociales.

Nos vemos en la próxima entrega.

Saludos!




23 comentarios:

  1. como siempre ayudandonos a aprender mas muchísimas gracas mi estimado Otto

    ResponderEliminar
  2. Hola, en unos de tus videos del 2014, vi algo parecido a esto...

    Estatus Calificaciones entre:
    DAR 9,00 - 10,00
    AAR 7,00 - 8,99
    EPAAR 4,01 - 6,99
    NAAR <=4,00

    La función que estoy aplicando no da el resultado del estatus, en ciertas celdas si, pero en otras no...
    Ah y al contar, ¿cuantos estudiantes estudiantes están entre 9,00 - 10,00? y así sucesivamente... igual tengo un pequeño error.

    Por favor, podrías ayudarme
    Gracias :-)

    ResponderEliminar
    Respuestas
    1. Dame la fórmula que están implementando para ver dónde está el error.
      Saludos!

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Ya casi un mes que me escribiste y no he tenido respuesta... por favor, Gracias

    ResponderEliminar
  5. HOLA OTTO COMO ESTA MIRE TENGO UN FORMULARIO CREAR PRECIO DE MOTOCICLETAS Y NO PUEDO PONER LOS TEXTBOX CON EL FORMATO DE MONEDA

    ResponderEliminar
  6. Aunque es diferente a lo publicado en YOUTUBE, las dos soluciones sirven y me ha solucionado mi problema de casi una semana....he dejado de rascarme la cabeza......gracias........Otto

    ResponderEliminar
  7. Hola Buenas Tardes Otto,

    Primero que nada espero te encuentres muy bien, segundo quisiera realizarte una consulta, tengo hecho toda una base de datos de clientes con sus ventas y pagos y todo lo demás. Ahora bien, todo esto lo puedo cargar en las hojas de excel mediante unos userform que trabajan perfectamente, pero me gustaría agregar mediante código de visual basic, que me aparezcan mensajes en la pantalla 1 mes antes de que se vaya terminar un contrato de uno de los clientes. La base de datos es de 60 clientes, y me gustaría automatizar por así decirlo, este proceso ya que el userform lo realicé de tal manera que no abra excel a menos que se le de una instrucción.

    Si pudieras ayudarme con el código sería genial.

    Espero me puedas ayudar, ya que he intentado de todo.

    Gracias.

    Saludos Cordiales!!!

    ResponderEliminar
  8. Estimado Otto, te felicito por tus videotutoriales con VBA, me han ayudado mucho para poder crear un Control de inventarios, pero lo que aun no he podido lograr es realizar un formulario que me de una consulta de ingresos y salidas de los productos en general, solicitado con rango de fechas para poder imprimirlos.
    Ojala me puedas orientar para poder realizar este formulario.

    Saludos.

    ResponderEliminar
  9. Hola como logro que no se apilen las filas, cuando realiza el filtro, las filas se juntan, no se si me doy a entender

    ResponderEliminar
  10. hola como logro que al ingresar una fecha en un textbox la muestre como dd/mm/yyyy

    ResponderEliminar
  11. hola como logro que al ingresar una fecha en un textbox la muestre como dd/mm/yyyy, y lo otro al tener la aplicacion excel oculta con application visible =false, al hacerla visible nuevamente me abre otro libro y no se como evitar eso
    gracias

    slds.

    ResponderEliminar
  12. Hola amigo. No se como abordar lo siguiente....
    Tengo un Textbox y una etiqueta con el nombre "Habitaciones disponibles" necesito una forma de que al ingresar un numero en el textbox para una fecha dada, se guarde ese numero indicando las habitaciones ocupadas y que me diga las habitaciones disponibles.

    Tendras alguna idea o libro o algun otro lugar de como abordar el problema? De antemano, MUCHAS GRACIAS

    ResponderEliminar
  13. Hola Otto,
    Estoy intentando hacer una macro para filtrar mis reportes a través de un formulario como en el vídeo! es una verdadera lastima que los archivos de Excel no continúen disponibles para poder comparar con lo que estoy haciendo! (ambos links están rotos). En fin una vez pongo en marcha la macro en versión test, tengo el siguiente error. run time Error '1004' Method 'Range' of object '_Global' Fail

    ResponderEliminar
  14. Muchas gracias por el aporte me funcionó a la perfección

    ResponderEliminar
  15. tengo el mismo problema, sin embargo yo realizo un busqueda filtrada x ID y necesito actualizar los datos y cuando llego a las fechas es el problema en este caso es específicamente una celda activa pero requiero sea en la columna para que cuando vaya a esa fila no tenga problemas al actualizar la fecha

    ResponderEliminar
  16. Muy buen aporte Profesor Otto, ¡ÉXITOS!

    ResponderEliminar
  17. Estimado, muy buenos sus videos tengo el siguiente problema tengo una macro
    Sub transferirDatosAFCInicio()
    Dim vigencia As String
    Dim appaterno As String
    Dim apmaterno As String
    Dim nombre As String
    Dim cedulaidentidad As String
    Dim fnac As String
    Dim sexo As String
    Dim domicilio As String
    Dim region As String
    Dim comuna As String
    Dim provincia As String
    Dim finicioserv As String
    Dim tipocontrato As String
    Dim nombreafp As String
    Dim ultimaFila As Long
    Dim ultimaFilaHoja As Long
    Dim cont As Long

    ultimaFila = Sheets("Base Datos").Range("C" & Rows.Count).End(xlUp).Row

    'Estas 3 líneas no se explican en el vídeo, sin embargo se adicionó para garantizar
    'que cuando se pretenda ejecutar el proceso y no hayan datos no borre el título de las
    'columnas de la hoja EEE
    If ultimaFila < 7 Then
    Exit Sub
    End If

    For cont = 7 To ultimaFila

    vigencia = Sheets("Base Datos").Cells(cont, 3)
    appaterno = Sheets("Base Datos").Cells(cont, 4)
    apmaterno = Sheets("Base Datos").Cells(cont, 5)
    nombre = Sheets("Base Datos").Cells(cont, 6)
    cedulaidentidad = Sheets("Base Datos").Cells(cont, 8)
    fnac = Sheets("Base Datos").Cells(cont, 9)
    sexo = Sheets("Base Datos").Cells(cont, 12)
    domicilio = Sheets("Base Datos").Cells(cont, 15)
    comuna = Sheets("Base Datos").Cells(cont, 16)
    provincia = Sheets("Base Datos").Cells(cont, 17)
    region = Sheets("Base Datos").Cells(cont, 18)
    finicioserv = Sheets("Base Datos").Cells(cont, 21)
    tipocontrato = Sheets("Base Datos").Cells(cont, 31)
    nombreafp = Sheets("Base Datos").Cells(cont, 33)


    If vigencia = "NUEVO" Then
    ultimaFilaHoja = Sheets("AFC Inicio").Range("B" & Rows.Count).End(xlUp).Row
    Sheets("AFC Inicio").Cells.Range("F7:F306") = Format(TextBox1, "MM/DD/YYYY")
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 2) = appaterno
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 3) = apmaterno
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 4) = nombre
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 5) = cedulaidentidad
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 6) = fnac
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 7) = sexo
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 8) = nombreafp
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 9) = domicilio
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 10) = comuna
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 11) = provincia
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 12) = region
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 13) = finicioserv
    Sheets("AFC Inicio").Cells(ultimaFilaHoja + 1, 18) = tipocontrato


    End If

    Next cont

    MsgBox "Proceso AFC Inicio terminado ", vbInformation, "Resultado"

    End Sub
    pero lo que pasa puntualmente en las fechas me copia mes/dia/año, y necesito que me copie como dia/mes/año, he intentado pero no me resulta, por favor si me puede ayudar, de antemano muchas gracias

    ResponderEliminar
    Respuestas
    1. Buenas, tengo el mismo problema, ¿Has conseguido solventarlo?

      Eliminar
  18. Te agradezco por la ayuda, llevo meses que cambiando el formato a mano... pero este año es excelente porque encontre la respuesta; y me funciono al 10 000 000%

    Private Sub fecha_afterupdate()

    Sheets("Compra de producto").Select
    Range("B4").Select
    ActiveCell.FormulaR1C1 = fecha.Value
    ActiveCell = Format(fecha, "MM/DD/YYYY")

    End Sub

    ResponderEliminar
  19. Buenas, he introducido el formato para los textbox que deben contener fechas, y en unos me lo hace bien y en otro no. ¿Que puedo hacer? Gracias

    ResponderEliminar