2016-04-14 16 views
0

excel sayfamın formatını sıfırlamaya çalışıyorum, sorun şu ki, tarih formatı olması gereken 4 sütuna sahibim. Başlıkta "DATE" yazan tüm sütunları nasıl bulabilirim (Son işlenen tarih, montaj tarihi, sipariş tarihi vb.) Ve bu formatı bugüne göre değiştirebilir miyim? Not: Gelecekte veya daha fazla sütun eklendiğinde C: C'den E: E'ye değişebileceğinden, dinamik olması gerekir.Biçim sütunu excel ile excel formatta biçimlendirmek için

Sub formatTable(ws As Worksheet) 
    On Error Resume Next 
    Dim lo As ListObject 
    Set lo = ws.ListObjects("FilterParts") 

    'Format the table 
    ws.UsedRange.Font.Bold = False 
    ws.UsedRange.Style = "Normal" 

    lo.TableStyle = "TableStyleMedium9" 
    'Format every column that has "DATE" in its header to a date column 
    'ws.Range("C:C").NumberFormat = "dd/mm/yyyy" and so on 


End Sub 
+0

tam başlık satırında nedir? Hepsi "tarih" kelimesini içeriyor mu? Veya üstbilgi satırındaki tüm tarihler "/" içeriyor mu? – Will

+0

Üstbilgi satır 2'de bulunur, Üstbilgi satırı şöyle görünür (hızlandırılmış,) ID, SON İŞLEME TARİHİ, ÇİZİM NUMARASI, TAHMİNİ SAAT, PDF, TXT ..... – skatun

cevap

1

Sadece bu gibi sütunların üzerinden yineleme isimleri "Date" içeriyorsa, denetlemek ve evet, o zaman onları biçimlendirmek:

Set lo = ws.ListObjects("FilterParts") 
For Each dataColumn In lo.ListColumns 
    If InStr(dataColumn.Name, "Date") > 0 Then 
     dataColumn.DataBodyRange.NumberFormat = "dd/mm/yyyy" 
    End If 
Next dataColumn 

çalıştır Bu makroyu her zaman yeni bir sütun ekleyin. Buradan

0
Dim HdrRow as range 
Dim Cl as Range 
Set HdrRow = ActiveSheet.UsedRange 
Set HdrRow = HdrRow.Row(1) 'assuming row 1 of the data contains headers 

For Each Cl In HdrRow.cells 
    If Instr(lCase(Cl.Value), "date") > 0 then 'This column has "date" in the header text 
enter code here 
Next Cl 

yapabilirsiniz ya bu ihtiyacınız varsa sadece geri göndermeden başladı almalısınız sonraki bir döngü veya hemen bu sütunda hücrelerin döngü hücre/sütun numarasını ....

saklamak Daha fazla yardım.

1

Daha uzun bir kodlama seçeneği ancak aralık boyunca döngüden kaçınmak için Find'u kullanır.

Dim ws As Worksheet 
Dim lo As ListObject 
Dim rng1 As Range 
Dim StrAddress As String 

Set ws = ActiveSheet 
Set lo = ws.ListObjects("FilterParts") 

Set rng1 = lo.Range.Rows(1).Find("Date", , , xlPart) 

If Not rng1 Is Nothing Then 
    StrAddress = rng1.Address 
    rng1.Offset(1, 0).Resize(lo.ListRows.Count, 1).NumberFormat = "dd/mm/yyyy" 
    Do 
    Set rng1 = lo.Range.Rows(1).Find("Date", rng1, , xlPart) 
    rng1.Offset(1, 0).Resize(lo.ListRows.Count, 1).NumberFormat = "dd/mm/yyyy" 
    Loop While StrAddress <> rng1.Address 
End If 
-1

Dene:

Range("A1","A50000").NumberFormat = "dd\/mm\/yyyy"