Autor Tema: Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid  (Leído 3179 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Solrac_V2.0

  • Bytes
  • *
  • Mensajes: 15
  • Reputación: +0/-0
    • Ver Perfil
Hola tal como el título del Asunto: "Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid", internamente el valor es Ejemplo: 08/11/2016 (dd/mm/yyyy) (verificado durante los puntos de interrupción, en un paso a paso) y en el archivo de Excel (en este caso versión 2007) resultante queda como 11/08/2016. y cuando la fecha es 11/11/2016 o superior si queda normal (dd/mm/yyyy).

Agradezco sus impresiones al respecto.

Este es el código completo de la exportación que estoy usando:

Private Sub CMD_EXPORT_ExcelLAB_Click()
    Dim HOY_DAT_Lab As Date
    Dim ii As Long          '|
    Dim J As Long           '|
    Dim fila As Long        '|
    Set obj_Excel = CreateObject("Excel.Application")
    obj_Excel.Visible = False
    Set obj_Libro = obj_Excel.Workbooks.Add
    Set obj_Hoja = obj_Libro.Sheets(1)
    obj_Libro.Sheets(1).Select
    Set obj_Hoja = obj_Excel.ActiveSheet
    obj_Excel.Visible = True
    fila = 5
    HOY_DAT_Lab = Date
    With obj_Hoja
        .Cells(5, 2) = "CÉDULA"
        .Cells(5, 3) = "PACIENTE"
        .Cells(5, 4) = "EXAMENES"
        .Cells(5, 5) = "REALIZADO"
        .Cells(5, 6) = "RECIBIDO"
        .Cells(5, 7) = "RETIRADO"
        On Error Resume Next
        .Columns("A:A").ColumnWidth = 0.92
        .Columns("B:B").ColumnWidth = 9.29
        .Columns("C:C").ColumnWidth = 23
        .Columns("D:D").ColumnWidth = 60
        .Columns("E:E").ColumnWidth = 14.14
        .Columns("F:F").ColumnWidth = 14.14
        .Columns("G:G").ColumnWidth = 14.14
        .Cells.Select
        .Cells.Interior.Color = &HFFFFFF
        .Cells(5, 2).Font.Color = -16711681
        .Cells(5, 2).Interior.Color = &HC00000
        .Cells(5, 2).Font.Bold = True
        .Cells(5, 3).Font.Color = -16711681
        .Cells(5, 3).Interior.Color = &HC00000
        .Cells(5, 3).Font.Bold = True
        .Cells(5, 4).Font.Color = -16711681
        .Cells(5, 4).Interior.Color = &HC00000
        .Cells(5, 4).Font.Bold = True
        .Cells(5, 5).Font.Color = -16711681
        .Cells(5, 5).Interior.Color = &HC00000
        .Cells(5, 5).Font.Bold = True
        .Cells(5, 6).Font.Color = -16711681
        .Cells(5, 6).Interior.Color = &HC00000
        .Cells(5, 6).Font.Bold = True
        .Cells(5, 7).Font.Color = -16711681
        .Cells(5, 7).Interior.Color = &HC00000
        .Cells(5, 7).Font.Bold = True
        .Cells(5, 2).Select
        .Cells(5, 2).AutoFilter
        .Cells(1, 2) = "SERVICIO MÉDICO"
        .Cells(1, 2).Font.Color = &H400040
        .Cells(1, 2).Font.Bold = True
        .Cells(2, 2) = "AMP"
        .Cells(2, 2).Font.Color = &HFF&
        .Cells(2, 2).Font.Bold = True
        .Cells(1, 4) = "EXPORTANDO   :"
        .Cells(1, 6) = "/ " & CStr(MSHFlexGrid_CUP_DISPONB.Rows - 1)
        .Cells(1, 4).Font.Bold
        .Cells(1, 5).Font.Bold
        .Cells(1, 6).Font.Bold
        .Cells(2, 5).Font.Color = &H400040
        .Cells(2, 5).Font.Bold = True
        .Cells(3, 5) = "EXPORTACIÓN EXCEL AL " & CStr(HOY_DAT_Lab)
        .Cells(3, 5).Font.Color = &H400000
        For ii = 1 To MSHFlexGrid_CUP_DISPONB.Rows - 1
            For J = 1 To 6
                If J = 4 Or J = 5 Or J = 6 Then .Cells(ii + fila, J + 1) = CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY"))
                If J <> 4 Or J <> 5 Or J <> 6 Then .Cells(ii + fila, J + 1) = MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J)
            Next J
            .Cells(1, 5) = CStr(ii)
        Next ii
        .Cells(1, 4) = ""
        .Cells(1, 5) = ""
        .Cells(1, 6) = ""
        .Cells(2, 5) = "CONSULTAS PACIENTES LABORATORIO"
        On Error Resume Next
        MousePointer = vbDefault
        Set obj_Hoja = Nothing
        Set obj_Libro = Nothing
        Set obj_Excel = Nothing
    End With
End Sub
« última modificación: Noviembre 25, 2016, 10:32:38 am por Solrac_V2.0 »

Solrac_V2.0

  • Bytes
  • *
  • Mensajes: 15
  • Reputación: +0/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #1 en: Noviembre 25, 2016, 04:43:34 pm »
 :o   Opps!!! Estoy revisando de nuevo el código. Y vi algo que pudiera ser la causa...

Código del programa que llena el MSHflexgrid:

Private Sub FilleLAB()
    ConsultaLenta
    CONSULTA = "SELECT CITAS.CEDULAS, PACIENTES.NOMBRE_ASEG, MORBILIDAD.DIAGNOSTICO, CITAS.FECH_CITA, CITAS.FECH_RECEP, CITAS.FECH_ENTRG " & _
    "FROM (CITAS INNER JOIN PACIENTES ON CITAS.CEDULAS = PACIENTES.CED_ASEG) INNER JOIN MORBILIDAD ON PACIENTES.CED_ASEG = MORBILIDAD.PACIENTE " & _
    "WHERE ((CITAS.ESPECIALIDAD)=25) AND " & _
    "((MORBILIDAD.MEDICO)=28) AND (((CITAS.FECH_CITA) BETWEEN #" & CDate(Format(DTP_desde_CONSULT.Value, "MM/DD/YYYY")) & "# AND #" & CDate(Format(DTP_hasta_CONSULTA.Value, "MM/DD/YYYY")) & "#) AND ((CITAS.CONSULTA)=TRUE)) AND ((CITAS.ANULADO)=FALSE) AND ((MORBILIDAD.ANULADO)=FALSE) ORDER BY CITAS.FECH_CITA, CITAS.HORA_CITA"
    Ini_BD
    If RecS.BOF <> True Or RecS.EOF <> True Then MSHFlexGrid_CUP_DISPONB.Rows = RecS.RecordCount    '-->CORRECION DE BUG :-)
    RellEFlexGRID_Laboratorio
End Sub


Y el Query resultante:

?consulta
SELECT CITAS.CEDULAS, PACIENTES.NOMBRE_ASEG, MORBILIDAD.DIAGNOSTICO, CITAS.FECH_CITA, CITAS.FECH_RECEP, CITAS.FECH_ENTRG FROM (CITAS INNER JOIN PACIENTES ON CITAS.CEDULAS = PACIENTES.CED_ASEG) INNER JOIN MORBILIDAD ON PACIENTES.CED_ASEG = MORBILIDAD.PACIENTE WHERE ((CITAS.ESPECIALIDAD)=25) AND ((MORBILIDAD.MEDICO)=28) AND (((CITAS.FECH_CITA) BETWEEN #11/01/2016# AND #25/11/2016#) AND ((CITAS.CONSULTA)=TRUE)) AND ((CITAS.ANULADO)=FALSE) AND ((MORBILIDAD.ANULADO)=FALSE) ORDER BY CITAS.FECH_CITA, CITAS.HORA_CITA

Como pueden ver en el ...BETWEEN #11/01/2016# AND #25/11/2016#)... , del query no debería aparecer así; ya que en el código VB6 se colocó así: ....BETWEEN #" & CDate(Format(DTP_desde_CONSULT.Value, "MM/DD/YYYY")) & "# AND #" & CDate(Format(DTP_hasta_CONSULTA.Value, "MM/DD/YYYY")) & "#)  . ¿Lo ven?, ¿qué opinan?

Sin embargo pese a esto en la grilla se ve bien el formato, el problema es solo en el resultado de la exportación a Excel, en mi aplicación el usuario ve bien la fecha dd/mm/yyyy , pero en Excel no.

¿Pueden ayudarme? Por favor.
« última modificación: Noviembre 25, 2016, 04:47:04 pm por Solrac_V2.0 »

Solrac_V2.0

  • Bytes
  • *
  • Mensajes: 15
  • Reputación: +0/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #2 en: Noviembre 25, 2016, 04:51:01 pm »
Agrego adicional el código con que relleno el MSHFflexgrid por si acaso, para que lo vean:

Private Sub RellEFlexGRID_Laboratorio()
    If RecS.EOF = True Or RecS.BOF = True Then
        RejillLAB = False
        Exit Sub
    Else
        RejillLAB = True
    End If
    Screen.MousePointer = vbHourglass
    MSHFlexGrid_CUP_DISPONB.Redraw = False
    RecS.MoveFirst
    If MSHFlexGrid_CUP_DISPONB.Rows = 1 Then
        'MSHFlexGrid_CUP_DISPONB.Redraw = True
        MSHFlexGrid_CUP_DISPONB.Clear
        Col_ViewLab
        'sOLUCION TEMPORAL'''''''''''
        Rellenn_2_Laboratorio
        Exit Sub
    End If
    Rellenn_2_Laboratorio
End Sub
Private Sub Rellenn_2_Laboratorio()
    MSHFlexGrid_CUP_DISPONB.Row = 1
    MSHFlexGrid_CUP_DISPONB.Col = 1
    MSHFlexGrid_CUP_DISPONB.Rows = MSHFlexGrid_CUP_DISPONB.Rows + 1
    MSHFlexGrid_CUP_DISPONB.RowSel = MSHFlexGrid_CUP_DISPONB.Rows - 1
    MSHFlexGrid_CUP_DISPONB.ColSel = MSHFlexGrid_CUP_DISPONB.Cols - 1
    MSHFlexGrid_CUP_DISPONB.Clip = RecS.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
    MSHFlexGrid_CUP_DISPONB.Row = 1
    MSHFlexGrid_CUP_DISPONB.Redraw = True
    Screen.MousePointer = vbDefault
End Sub

Espero les sirva, y gracias por adelantado, si me pueden dar luz con respecto a este problema que tengo.

Solrac_V2.0

  • Bytes
  • *
  • Mensajes: 15
  • Reputación: +0/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #3 en: Noviembre 26, 2016, 09:38:49 am »
 :) Buenos dias, otra vez yo, hice cambio de esta forma en : ....BETWEEN #" & CDate(Format(DTP_desde_CONSULT.Value, "DD/MM/YYYY")) & "# AND #" & CDate(Format(DTP_hasta_CONSULTA.Value, "DD/MM/YYYY")) & "#)  ::)

... y sigue igual el problema   :(  ; en pantalla el MSHFlexgrid visualiza bien el formato fecha dd/mm/yyyy pero cuando veo el resultado en la hoja de Excel exportada aparece el problema descrito antes. En una exportacion de un DATAGRID NO me pasa esto. Por favor alguien con mas experiencia que yo en Visual Basic 6 y Excel me puede ayudar?. Gracias.  :)

ale_xi

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +3/-1
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #4 en: Noviembre 27, 2016, 01:48:51 am »
hola, como estas

 ayudarte pasándote este proyectito en el que podrás apreciar cómo Exportación a Excel de un MSHflexgrid Ojalá te sirva.

https://mega.nz/#!BhdwUbJS!6eE1I5dmHCIL0Sq5ICSNpnSIgw3YbLiBbK2_tNC7Pq4
« última modificación: Noviembre 27, 2016, 01:51:27 am por ale_xi »

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #5 en: Noviembre 27, 2016, 04:03:44 am »
No tengo nada a mano, pero lo que mejor me resultó fue hacerlo con ADO, con instrucciones SQL, como si fuese una base de datos. La ventaja es que en la pc del cliente no es necesario que esté instalado el excel. Primero se crea la hoja con los campos, y luego se hace un INSERT

NEBIRE

  • Kilobyte
  • **
  • Mensajes: 57
  • Reputación: +7/-1
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #6 en: Noviembre 29, 2016, 10:58:01 pm »
Creo que el problema lo tienes en Excel. Conforme a como tengas indicado la presentación de fechas en Excel... en general en idioma inglés muestran primero el mes, luego el día y luego el año...

Una solución, sería no pasar a Excel ese campo como fecha, si no como un string.

VB6 tiene funciones para eso:

Código: [Seleccionar]
Dim f as string
dim d1 as date, d2 as date

d1= now

f= Cstr(now) ' convierte en una cadena la fecha...

d2 = DateTime.DateAdd("s", 800000, d1)  ' devuelve una fecha, compuesta por otroa fecha a la que se le ha sumado la cantidad de tiempo del tipo de intervalo indicado "s" = segundos...

' también tienes DateDiff , que resta tiempo de una fecha...

if IsDate(f) =true then    ' pregunta si una cadena puede ser interpretada como fecha
    d2= f     ' d2 ahora = d1
end if

d1= DateValue(f) ' equivalente a lo anterior, pero en este caso debes tener seguro que la cadena es interpretable como fecha.

f = "Pedro"
d1 = DateValue(f)  ' por ejemplo, esto da error...

x= f   ' x es unvariant, ya que no ha sido definida la variable...
d1= CvDate(x)  ' convierte en fecha un valor de tipo variant...

' También puedes utilizar la fecha por sus campos:
d2 = DateSerial(2016, 11, 30) ' año mes y día

Por tanto si le pasas el campo al Excel en forma de cadena, Excel, no tendrá motivo para convertirlo en fecha y cambiarel formato según esté 'localizado'.

Solrac_V2.0

  • Bytes
  • *
  • Mensajes: 15
  • Reputación: +0/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #7 en: Noviembre 30, 2016, 07:52:51 pm »
Gracias por responder. Disculpen por no responder inmediatamente. Entre el trabajo, familia y otras actividades no he podido revisar el código; este es uno de varios bugs que tiene mi programa; pero los otros son de lógica, y no sintácticos, esos son mi deber buscarles solución. Probare lo que me dicen y les estaré informando, aunque también en otras paginas vi otras posibles soluciones que también probare. Nuevamente muchas gracias, les estaré informando que tal me fue.

Solrac_V2.0

  • Bytes
  • *
  • Mensajes: 15
  • Reputación: +0/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #8 en: Diciembre 02, 2016, 12:08:10 am »
Hola otra vez, he intentado por varios metodos enviar la fecha convertida en texto, pero Excel le da automaticamente el formato que no quiero. VB6 envia 07/11/2016 en formato dd/mm/yyyy y excel coloca ese valor en 11/07/2016. Y el formato que Excel asigna es "dd/mm/yyyy" que es el correcto pero por alguna razon que desconozco invierte el dia con el mes y asume erroneamente que 11 es el dia y que 07 es el mes en la celda que Excel le asigna un formato adecuado.
En resumidas cuentas. VB6 envia a Excel el formato correcto, y Excel le asigna a la celda el Formato correcto pero intercambia los valores 11 y 07 durante la exportacion.
Trate de implementar el consejo que me dieron mas arriba:

For ii = 1 To MSHFlexGrid_CUP_DISPONB.Rows - 1
            For J = 1 To 6
                'If J = 4 Or J = 5 Or J = 6 Then .Cells(ii + fila, J + 1) = CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY"))
                If J = 4 Or J = 5 Or J = 6 Then
                    Dim f As String
                    Dim d1 As Date, d2 As Date
                    d1 = MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J)
                    f = CStr(d1)
                    d2 = DateTime.DateAdd("s", 800000, d1)
                    If IsDate(f) = True Then
                        d2 = f
                    End If
                    d1 = DateValue(f)
                    .Cells(ii + fila, J + 1) = d1
                End If
                If J <> 4 Or J <> 5 Or J <> 6 Then .Cells(ii + fila, J + 1) = MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J)
            Next J
            .Cells(1, 5) = CStr(ii)

Pero el problema continua. Es Excel quien intercambia los numeros.

Incluso usando .NumberFormat = "dd/mm/yyyy" no arregla el problema, debere seguir buscando. Alguno(a) de ustedes ha usado algun codigo que haya tenido exito con este tipo de problema????
Gracias de antemano por cualquier ayuda que me puedan dar, por favor pueden intentar reproducir el fallo en sus Pc y dar con la solucion????.

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #9 en: Diciembre 02, 2016, 12:42:32 pm »
Ahi tenes algún problema de configuración regional y la representación de la fecha.  Y si formateas la fecha en Vb como mm/dd/yyyy que es el formato eeuu y según comentas excel lo espera en ese formato

NEBIRE

  • Kilobyte
  • **
  • Mensajes: 57
  • Reputación: +7/-1
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #10 en: Diciembre 03, 2016, 11:17:56 am »
Carlos (Solrac), creo que no me he explicado bien...
Si el problema es efectivamente excel, entonces hay que indicarle el formato a la celda... para que puedas especificar que tipo de contenido aloja, puedes simplemente indicarle que es texto y por tanto no hará ninguna conversión de ninguna clase...

Range("B2").Numberformat= "@" ' <----- esto le da formato de texto a la celda B2.

Incluso puedes darle un formato 'custom'...
Observa el siguiente código,

Código: [Seleccionar]
Private Sub Command1_Click()

    With Hoja
        .Cells(2, 1) = Text1.Text   ' un texto de prueba
        .Cells(2, 2) = Text2.Text   ' <---- aquí una fecha
        ' Un formato customizado, de tipo texto....
        .Range("B2").NumberFormat = "[$-C0A]" & Chr(34) & "día " & Chr(34) & "d" & Chr$(34) & " del mes " & Chr$(34) & "mmmm" & Chr(34) & " del año " & Chr(34) & "yyyy;@" ' "mm/dd/yyyy"
        .Cells(3, 2) = 45
        .Range("B3").NumberFormat = "@"   ' <---- le indico que es un texto (se alinea a la izquierda)
        .Cells(4, 2) = 45
        .Range("B4").NumberFormat = "#"  ' <---- le indocque lo trate como un número (se alinea a la derecha)
    End With
    Libro.Save
    oExcel.ActiveWorkbook.Close False, "c:\Cuentas.xlsx"
    oExcel.Quit
End Sub
NOTA: el código: "[$-C0A]" , refiere a que use como idioma el español, ese es el indicativo del código español 0A (en hexadeciaml), la C, creo que es por la versión del S.O. y/o de Excel, no lo tengo seguro...

Y dicho código genera la siguiente salida:



Si veo, que la fecha, al abrir el excel, muestra tal como aparece en el editor de fórmula, pero pulsando allí, luego se cambia al formato como toca.
Si las celdas que han de ser de fecha, directamente abres excel, las seleccionas y le cambias el formato (cell Format), a texto, seguramente se vea todo bien. Pero es que es casi seguro que el idioma que tienes no es el español...

En esta otra imagen observa como, y donde poder cambiar (el formato, click sobre la celda con el otro botón del ratón y elige Cell format).
En el punto 4, se ve la selección de la regionalidad (por defecto se atiene a lo que haya puesto en el panel de control, tanto en idioma como en el formato, si no se cambia en el propio excel...). Y si es el cliente quien lo ve mal, y no tú, entonces hazlo por código, tal como te he mostrado más arriba .

« última modificación: Diciembre 03, 2016, 11:21:40 am por NEBIRE »

Solrac_V2.0

  • Bytes
  • *
  • Mensajes: 15
  • Reputación: +0/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #11 en: Diciembre 05, 2016, 04:12:30 am »
SOLUCIONADO!!!!!!!!!!!!!!!
 :D
 ;)
 :)

Mil Gracias!!!!!

Aprendi algo nuevo gracias!!!!!!!!!!!!!

Efectivamente uno de los usuarios tiene un Windows y Excel en Ingles.......... aunque la configuracion regional estaba bien (configurado de acuerdo con el pais y sus formatos) no se porque hacia esto; pero pasaba.

como veran en el codigo mas abajo implemente la solucion que me indico NEBIRE, y el problema seguia ocurriendo, pero NEBIRE tambien me indico como convertir en texto un numero con: .NumberFormat = "@" . Entonces me recorde que existe DatePart y se me ocurrio hacer el codigo que les muestro; solucionando asi el problema:

For ii = 1 To MSHFlexGrid_CUP_DISPONB.Rows - 1
            For J = 1 To 6
                'If J = 4 Or J = 5 Or J = 6 Then .Cells(ii + fila, J + 1) = CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY"))
                'If J = 4 Or J = 5 Or J = 6 Then
                '    .Cells(ii + fila, J + 1) = CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY"))
                '    .Cells(ii + fila, J + 1).Select
                '    .Cells(ii + fila, J + 1).NumberFormat = "[$-C0A]" & Chr(34) & "día " & Chr(34) & "d" & Chr$(34) & " del mes " & Chr$(34) & "mmmm" & Chr(34) & " del año " & Chr(34) & "yyyy;@" ' "mm/dd/yyyy"
                'End If
                If J = 4 Or J = 5 Or J = 6 Then
                    .Cells(ii + fila, J + 1) = DatePart("d", CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY")))
                    .Cells(ii + fila, J + 1).NumberFormat = "@"
                    .Cells(ii + fila, J + 1) = .Cells(ii + fila, J + 1) & DatePart("m", CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY")))
                    .Cells(ii + fila, J + 1) = .Cells(ii + fila, J + 1) & DatePart("yyyy", CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY")))
                End If
                If J <> 4 Or J <> 5 Or J <> 6 Then .Cells(ii + fila, J + 1) = MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J)
            Next J
            .Cells(1, 5) = CStr(ii)
        Next ii

Muchas gracias a NEBIRE, a Waldo, y a Ale_xi, (y a este ultimo el link de codigo de descarga, nunca pude descargarme el codigo de ejemplo que me sugirio, si por favor me puede ayudar(trate de descargarlo por navegador y fallo, luego lo volvi a intentar y me solicitaba registrarme obligado si queria bajarme el codigo)).

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #12 en: Diciembre 05, 2016, 11:09:48 pm »
Me alegro que haya salido

NEBIRE

  • Kilobyte
  • **
  • Mensajes: 57
  • Reputación: +7/-1
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #13 en: Diciembre 11, 2016, 11:00:55 pm »
SOLUCIONADO!!!!!!!!!!!!!!!
Me alegro, pero.... veo tu código muy tortuoso...

                If J = 4 Or J = 5 Or J = 6 Then
                    .Cells(ii + fila, J + 1) = DatePart("d", CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY")))
                    .Cells(ii + fila, J + 1).NumberFormat = "@"
                    .Cells(ii + fila, J + 1) = .Cells(ii + fila, J + 1) & DatePart("m", CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY")))
                    .Cells(ii + fila, J + 1) = .Cells(ii + fila, J + 1) & DatePart("yyyy", CDate(Format(MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J), "DD/MM/YYYY")))
                End If
                If J <> 4 Or J <> 5 Or J <> 6 Then .Cells(ii + fila, J + 1) = MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J)
            Next J
            .Cells(1, 5) = CStr(ii)
        Next ii
El hierarquical FlexGrid, guarda los datos como texto, luego si en el FlexGrid, aparecen bien las fechas, no hay que hacer ninguna conversión ni cambio de formato, basta pasarle así el dato a Excel... y el código sería mucho más simple...
algo como:

Código: [Seleccionar]
                .Cells(ii + fila, J + 1).NumberFormat = "@" ' al prinicpio o al final, le damos formato de texto a la celda...
                If ((J >= 4) and (J <= 6)) Then  ' Es decir J= 4, ó 5 ó 6
                    .Cells(ii + fila, J + 1) = MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J)
                else ' si no es ni 4, ni 5 ni 6, entonces es otro caso, es decir 'else'...
                    .Cells(ii + fila, J + 1) = MSHFlexGrid_CUP_DISPONB.TextMatrix(ii, J)  ' al final pones lo mismo en ambos casos.
                End If
            Next J
            .Cells(1, 5) = CStr(ii)
       Next ii

El nombre del control Grid, también es tortuoso...
De: MSHFlexGrid_CUP_DISPONB
Cambialo a algo más simple como: hfGridCupDisponB, sigue siendo largo, pero no monstruoso...
Aún más simple, así: hfgCupDisponB

...y para terminar, dado que varias veces aparece las referencias de fila y columna en Excel, es preferible, asociarlas de una sola vez, para evitar suma tras suma. Es un gasto inútil de procesameinto, solo por no declarar y mantener 2 variables...
Código: [Seleccionar]
                fil= (fila +ii) : col= (J +1)
                .Cells(fil, col).NumberFormat = "@"             
               .Cells(fil, col) = .... ' en adelante (fil, col), sin sumascontínuas.
               ' Solo sumas 1 vez 'ii + fila', y una sola vez 'J+1' no cada vez que haya que pasar dicha posición...
               ' es más, como se ve que forma parte de un doble bucle, seguramente se podría designar en cada ciclo del bucle externo, y luego actualiizar en cada ciclo del bucle interno... pero bueno, eso ya depende de como vaya cruzado todo...
             
« última modificación: Diciembre 11, 2016, 11:13:53 pm por NEBIRE »

Solrac_V2.0

  • Bytes
  • *
  • Mensajes: 15
  • Reputación: +0/-0
    • Ver Perfil
Re:Problema con Formato de Fechas durante Exportación a Excel de un MSHflexgrid
« Respuesta #14 en: Diciembre 12, 2016, 03:06:24 pm »
Gracias por los Consejos NEBIRE, los tomaré en cuenta, para simplificar mi código.