2012-07-21 15 views
6

tengo los datos en una hoja de Excel en el siguiente formato:VBA para convertir la cadena Fecha

 
ItemCode       DeliveryDate 
5456987        24.01.2009 
5456988           
5456989        12.24.2009 
5456990        12/24/2009 

He almacenados los valores de fechaEntrega en una matriz. Necesito tomar una decisión sobre los principios básicos de la fecha y luego imprimir el resultado en una hoja nueva. Así que tengo que convertir los valores en la matriz:

Dim current as Date, highest as Date, result() as Date 
For Each itemDate in DeliveryDateArray 
    current = CDate(itemDate) 
    if current > highest then 
     highest = current 
    end if 
    ' some more operations an put dates into result array 
Next itemDate 
'After activating final sheet... 
Range("A1").Resize(UBound(result), 1).Value = Application.Transpose(result) 

Desafortunadamente, CDate() función emite el error:

Run-time error '13':

Type mismatch

¿Hay una función en VBA, que puede:

  • de análisis string con cualquier formato de fecha y devolver un objeto de fecha para trabajar.
  • devuelve un objeto de fecha vacía, si la cadena está vacía o mal formada (para comparación en el ciclo).

Editar:

para reproducir el error, sólo tiene que ejecutar myDate = CDate("24.01.2009")

+0

de acuerdo con este sitio [http://www.example-code.com /vb/stringtodate.asp] lo estabas haciendo bien ... ¿Dónde arroja el error? ¿En qué fila - la primera o la segunda línea (cadena vacía)? ¿Has intentado cambiar el formato de cadena? Es posible que desee cambiar el formato de cómo está analizando las cadenas de fechas allí. "24.01.2009" puede no ser reconocido pero "24/12/2009" puede: intente convertir el 24/12/2009 solamente y verifique si funciona. Si funciona, entonces el formato 24.01.2009 puede ser inaceptable. –

+0

Intente convertir el 24/12/2009 para ver si funciona. Si funciona, entonces el formato dd.MM.aaaa puede ser inaceptable para CDate. Puede haber una manera de que especifique cómo está formateado para que pueda analizarlo exactamente de la manera que lo desee. Si el formato dd.MM.aaaa es el que está causando el problema, primero cambie el formato como reemplazar el "." con un "/" e intenta convertirlo de nuevo. O formatéelo de forma que se convierta en MM/dd/aaaa y luego conviértalo. Supongo que solo quiero saber si el error "12/24/2009" se saldrá o no. Verifique primero y hágamelo saber. –

+0

@AnnB. Bueno, mi primera pregunta es; ¿Existe una función de VBA que pueda analizar cadena con * cualquier * formato de fecha y devolver un objeto de fecha para trabajar? –

Respuesta

8

Intente usar Replace para ver si le conviene. El problema, como lo veo, que se ha mencionado algunas veces arriba, es que la función CDate se está ahogando en los períodos. Puede usar replace para cambiarlos a barras diagonales. Para responder a su pregunta sobre una función en vba que puede analizar cualquier formato de fecha, no hay ninguna que tenga opciones muy limitadas.

Dim current as Date, highest as Date, result() as Date 
For Each itemDate in DeliveryDateArray 
    Dim tempDate As String 
    itemDate = IIf(Trim(itemDate) = "", "0", itemDate) 'Added per OP's request. 
    tempDate = Replace(itemDate, ".", "/") 
    current = Format(CDate(tempDate),"dd/mm/yyyy") 
    if current > highest then 
     highest = current 
    end if 
    ' some more operations an put dates into result array 
Next itemDate 
'After activating final sheet... 
Range("A1").Resize(UBound(result), 1).Value = Application.Transpose(result) 
+0

@JasonWilliams Lo agregaré a la respuesta, ¿está seguro de que desea usar "0" como valor predeterminado en un horario (12:00:00 a.m.) no una Fecha. –

0

parece que podría estar lanzando el error en la fila de datos vacía, has necesitado sólo asegúrese de ISN itemDate ¿Está vacío antes de ejecutar la función CDate()? Creo que este podría ser tu problema.

+0

No, no es el caso. Verifica la edición. –

+1

Ok. Eso hubiera sido útil cuando colocas tus datos allí. –

+0

Y ha comprobado el formato necesario para CDate(), esto podría ser útil si no tiene [hilo similar] (http://stackoverflow.com/questions/7481309/vba-issues-converting-string-to-date -using-format-or-cdate). Por lo que parece, es posible que tenga que volver a formatear la fecha en la que está pasando. –

0

I utiliza este código:

ws.Range ("A: A"). FormulaR1C1 = "= DATEVALUE (RC [1])"

columna A será mm/dd/aaaa

RC [1] es la columna B, la cadena de texto, por ejemplo, 01/30/12, esto no es FECHA TIPO

+0

Esto realmente no responde la pregunta. Estaban tratando de analizar 'dd.mm.aaaa' que no se maneja de forma nativa mediante las funciones de VB/VBA/Excel. – Deanna

Cuestiones relacionadas