2012-07-21 31 views
6

Ben aşağıdaki biçimde bir Excel sayfasında veriler: Bir dizi DeliveryDate değerlerini kaydettiktenvba dize Tarihi dönüştürme

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

. Tarihin temelleri konusunda karar vermem ve sonucu yeni bir sayfa halinde basmam gerekiyor.

  • ayrıştırma: VBA bir işlev hangi can var mı

    Run-time error '13':

    Type mismatch

    : Ben diziye değerleri dönüştürmek zorunda:

    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) 
    

    Maalesef CDate() fonksiyonu hata atıyor herhangi bir tarih biçimiyle dize ve birlikte çalışmak için bir tarih nesnesi döndürün.

  • Boş bir tarih nesnesini, dize boşsa veya hatalıysa (döngüde karşılaştırmak için) döndürün.

Düzenleme:

basitçe, o boş veri satırında hata atma olabilir gibi myDate = CDate("24.01.2009")

+0

dEĞİLDİR olduğunu http://www.example-code.com /vb/stringtodate.asp] doğru yapıyordun ... Hatayı nereye atar? Hangi satırda - ilk veya ikinci satır (boş dize)? Dize formatını değiştirmeyi denediniz mi? Tarih dizelerini burada nasıl ayrıştırdığınıza ilişkin biçimi değiştirmek isteyebilirsiniz. "24.01.2009" kabul edilmeyebilir, ancak "12/24/2009" olabilir - sadece 12/24/2009 'u dönüştürmeye çalışın ve çalışıp çalışmadığını görün. Çalışıyorsa, 24.01.2009 biçimi kabul edilemez olabilir. –

+0

Çalışıyor olup olmadığını görmek için 12/24/2009 dönüştürmeyi deneyin. Eğer işe yararsa, o zaman dd.MM.yyyy formatı CDate için uygun olmayabilir. Biçimlendirilmesinin nasıl yapılacağını belirtmeniz için bir yol olabilir, böylece tam olarak istediğiniz şekilde ayrıştırılabilir. Dd.MM.yyyy biçimi, bu soruna neden olan şey ise, önce biçimi "." Gibi değiştirmek bir "/" ile ve tekrar dönüştürmeyi deneyin. Ya da MM/gg/yyyy olacak şekilde biçimlendirin ve sonra dönüştürün. Sanırım "12/24/2009" un hata yapıp yapmayacağını bilmek istiyorum. İlk önce kontrol et ve bana haber ver. –

+0

@AnnB., Ilk sorum şu; * Herhangi bir tarih formatıyla dizeyi ayrıştırabilen ve çalışmak için bir tarih nesnesi döndüren bir VBA işlevi var mı? –

cevap

8

Sizin için çalışıp çalışmadığını görmek için Replace kullanmayı deneyin. Gördüğüm gibi birkaç kez yukarıda değinilen problem, CDate fonksiyonunun periyodlarda boğulmasıdır. Değiştirmeyi eğik çizgiye çevirmek için kullanabilirsiniz. Herhangi bir tarih formatını ayrıştırabilen vba'daki bir Fonksiyon hakkındaki sorunuzu cevaplamak için, çok sınırlı seçenekleriniz yok.

ws.Range ("A: Bir")

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 Cevaplara ekleyeceğim, "0" değerini kullanmak istediğinize emin misiniz? (12:00:00)) Tarih değil. –

0

görünüyor çalıştırmak sadece emin itemDate değilmi yapmaya çalıştık var, hata yeniden oluşturmak için CDate() işlevini çalıştırmadan önce boş mu? Bence bu senin problemin olabilir.

+0

Hayır, durum böyle değil. Düzenlemeyi kontrol et. –

+1

Tamam. Verilerinizi buraya koyduğunuzda bu yararlı olurdu. –

+0

Ve CDate() için gereken biçimlendirmeyi kontrol ettiniz, [benzer iş parçacığı] (http://stackoverflow.com/questions/7481309/vba-issues-converting-string-to-date) yoksa bu yararlı olabilir Bölme -Mobil format veya-CDate). Görünüşünden itibaren geçtiğiniz tarihi yeniden biçimlendirmeniz gerekebilir. –

0

Bu kodu kullanılır. FormulaR1C1 = "= DATEVALUE (RC [1])"

kolon A olacak gg/aa/yyyy

RC [1] B sütunu, METİN dize, örneğin 01/30/12 bu sitede [göre, BU TARİH TİPİ

+0

Bu soruya gerçekten cevap vermiyor. VB/VBA/Excel işlevleri tarafından doğal olarak ele alınmayan dd.mm.yyyy'yi ayrıştırmaya çalışıyorlardı. – Deanna