2012-07-21 20 views
6

ho dati in un foglio di Excel nel seguente formato:VBA convertire la stringa fino ad oggi

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

ho memorizzati i valori di DeliveryDate in un array. Devo prendere una decisione sulle basi della data e poi stampare il risultato in un nuovo foglio. Quindi devo convertire i valori in una matrice:

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) 

Purtroppo, CDate() la funzione genera l'errore:

Run-time error '13':

Type mismatch

C'è una funzione in VBA che può:

  • parse stringa con qualsiasi formato data e restituire un oggetto data con cui lavorare.
  • restituisce un oggetto data vuoto, se la stringa è vuota o non valida (per il confronto nel ciclo).

Edit:

Per riprodurre l'errore, è sufficiente eseguire myDate = CDate("24.01.2009")

+0

Secondo questo sito [http://www.example-code.com /vb/stringtodate.asp] lo stavi facendo bene..Qualora genera l'errore? Su quale riga - la prima o la seconda riga (stringa vuota)? Hai provato a cambiare il formato della stringa? Potresti voler cambiare il formato su come stai analizzando le stringhe di date lì. "24.01.2009" potrebbe non essere riconosciuto ma "12/24/2009" potrebbe - provare a convertire solo il 24/12/2009 e vedere se funziona. Se funziona, allora il formato 24.01.2009 potrebbe essere inaccettabile. –

+0

Prova a convertire il 24/12/2009 per vedere se funziona. Se funziona, il formato dd.MM.yyyy potrebbe non essere utilizzabile per CDate. Potrebbe esserci un modo per specificare come è formattato in modo che possa analizzarlo esattamente nel modo desiderato. Se il formato dd.MM.yyy è quello che sta causando il problema, cambia il formato prima come sostituire "." con un "/" e prova a convertirlo di nuovo. Oppure formattarlo in modo che diventi MM/gg/aaaa e quindi convertirlo. Immagino che voglio solo sapere se "24/12/2009" uscirà o meno. Controlla prima e fammi sapere. –

+0

@ AnnB., Beh, la mia prima domanda è; Esiste una funzione VBA che può analizzare la stringa con * qualsiasi * formato data e restituire un oggetto data con cui lavorare? –

risposta

8

Provare a utilizzare Replace per vedere se funzionerà per voi. Il problema, come lo vedo, che è stato menzionato alcune volte sopra è che la funzione CDate sta soffocando sui periodi. Puoi usare replace per cambiarli in barre. Per rispondere alla tua domanda su una funzione in vba che può analizzare qualsiasi formato di data, non ci sono opzioni molto limitate. FormulaR1C1 = "= ([1] RC) DATA.VALORE" dd

colonna A sarà mm/

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 aggiungerò alla risposta, sei sicuro di voler usare "0" per impostazione predefinita a Ora (12:00:00 AM) non una data. –

0

sembra che potrebbe essere gettando l'errore sulla riga di dati vuota, hai provato a fare solo assicurarsi isn itemDate essere vuoto prima di eseguire la funzione CDate()? Penso che questo potrebbe essere il tuo problema.

+0

Non è il caso. Controlla la modifica. –

+1

Ok. Sarebbe stato utile quando hai messo i tuoi dati lassù. –

+0

E hai controllato la formattazione necessaria per CDate(), questo potrebbe essere utile se non hai [thread simile] (http://stackoverflow.com/questions/7481309/vba-issues-converting-string-to-date -Utilizzo-format-o-CDate). A giudicare dall'aspetto, potresti dover riformattare la data in cui stai passando. –

0

Ho usato questo codice::

ws.Range ("A")./aaaa

RC [1] è la colonna B, la stringa di testo, ad esempio, 01/30/12, questo non è DATA TYPE

+0

Questo in realtà non risponde alla domanda. Stavano cercando di analizzare 'dd.mm.yyyy' che non è nativamente gestito dalle funzioni VB/VBA/Excel. – Deanna

Problemi correlati